gpt4 book ai didi

c# - Entity Framework DbEntityEntry.Property 方法是否使用反射?

转载 作者:太空狗 更新时间:2023-10-29 23:05:06 31 4
gpt4 key购买 nike

这个问题是关于这段代码的:

entityEntry.Property("WhateverProperty").CurrentValue = 1;

我回答了this question昨天,如果您在问题的评论(不是答案)中注意到,其中一位成员@gertarnold 是这样说的:

entityEntry.Property("InsertedBy") doesn't use reflection, it reads the EF metadata.

当然,它使用 EF 元数据来确定实体是否具有该属性,但我很确定在某处他们必须使用反射来设置属性>.

我试着查看源代码 here , herehere (line 484)然后退缩了。

所以问题是:

  1. 它是否使用反射?
  2. 如果不是,那么属性是如何设置的?

最佳答案

它不使用反射(反射是在创建元数据模型时完成的),而是一次从已编译的动态表达式构建和缓存委托(delegate)。

实际属性集的代码是here :

internal static void SetValue(EdmProperty property, object target, object value)
{
var setter = GetSetterDelegateForProperty(property);
setter(target, value);
}

构建表达式和编译委托(delegate)是 here .

基本上它创建、缓存和使用如下内容:

Action<object, object> setter = (target, value) =>
((TEntity)target).Property = (TValue)value;

关于c# - Entity Framework DbEntityEntry.Property 方法是否使用反射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49210879/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com