Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DynamicProxy为PropertyInfo.GetValue返回null(obj,null)_C#_Entity Framework - Fatal编程技术网

C# DynamicProxy为PropertyInfo.GetValue返回null(obj,null)

C# DynamicProxy为PropertyInfo.GetValue返回null(obj,null),c#,entity-framework,C#,Entity Framework,这让我抓狂。我正在使用EntityFramework 6.1.2。下面是一行奇怪的代码: var materialBt = prop.GetValue(material, null); 其中,prop是指一对一关联的PropertyInfo,而material是实体的DynamicProxies…代理。通过对基本实体类型而不是DynamicProxy类型调用type.GetProperties来获取prop可能是相关的。如果我从代理类中获取相应的PropertyInfo,也会发生同样的情况,即

这让我抓狂。我正在使用EntityFramework 6.1.2。下面是一行奇怪的代码:

var materialBt = prop.GetValue(material, null);
其中,
prop
是指一对一关联的
PropertyInfo
,而
material
是实体的
DynamicProxies…
代理。通过对基本实体类型而不是DynamicProxy类型调用
type.GetProperties
来获取
prop
可能是相关的。如果我从代理类中获取相应的
PropertyInfo
,也会发生同样的情况,即
material.GetType().GetProperty(prop.Name).GetValue(material,null)
也会返回
null

我在这一行之后立即设置了一个断点。执行后,
materialBt
为空。但是,如果我使用调试器检查
material
,或者通过即时窗口调用
prop.GetValue(material,null)
,则所讨论的属性有一个值

这种情况经常发生。我观察到它有时会为
materialBt
返回正确的值,但似乎在执行过程中遇到断点时会发生这种情况……那么,它是否有“时间”来获取值呢?但这应该是原子的,不是吗

这是一个懒惰加载的东西吗?
PropertyInfo
是从基类而不是代理类获取的问题吗

更正: 进一步研究,似乎只有当我通过调试器检查该值时,才正确返回该值,方法是将鼠标悬停在
material
上并展开
base
。我发现,事实上,如果在使用GUI检查器之前尝试立即窗口,我会在运行代码返回时得到
null
。因此,调试器中的GUI检查器似乎正在触发要填充的属性

更多代码:
或者,如果您想

可以发布更多代码吗?这可能是
收益率返回的一些问题
或者
IEnumerable
的计算时间问题@Stefan刚刚发布了一些附加信息,可能会有所帮助。您对哪些代码位感兴趣?所讨论的
prop
是一个对一的关联,所以我认为它与
IEnumerables
无关。好吧,这里延迟的执行时间不是问题,但我确实想知道:为什么您的方法标记为
async
?@Stefan在下面有一个对
GetByIdAsync
方法的调用,该方法可以进行DB调用,基于EntityKey,它使用此处的反射进行挖掘。那个是异步的,所以我们必须等待它。aarrgghh!!所涉及的属性未标记为虚拟!但是…这让它有时仍然有效???
private async Task Merge (Type type, object ephemeral, object material)
{
    PropertyInfo[] props = type.GetProperties();
    foreach (PropertyInfo prop in props)
    {
        //...
        if(IsModel(prop.PropertyType))
        {
            // A belongsTo relationship

-->         var materialBt = prop.GetValue(material, null);