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

时间:2015-02-26 10:29:44

标签: c# entity-framework

这让我很沮丧。我正在使用EntityFramework 6.1.2。这是奇怪的代码行:

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

其中prop是引用一对一关联的PropertyInfomaterial是实体的DynamicProxies...代理。 通过在 base 实体类型上调用prop而不是DynamicProxy类型,可能type.GetProperties相关。< / strike>如果我从代理类中获得相应的PropertyInfo,也会发生同样的事情,即material.GetType().GetProperty(prop.Name).GetValue(material, null)也会返回null

我在此行之后立即设置断点。执行后,materialBt为空。但是,如果我使用调试器检查material或通过立即窗口调用prop.GetValue(material, null)有问题的属性有一个值!

发生通常是。我观察到它有时会为materialBt返回正确的值,但是当我有一个断点进一步执行时,似乎会发生这种情况......所以也许它有“时间”来获取值呢?但这应该是原子的,不应该吗?

这是一个懒惰的装载物吗? 问题是PropertyInfo是从基础而不是代理类获得的吗?

校正:

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

更多代码:

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);

或者,如果你想要the full context...

0 个答案:

没有答案