具有实体框架代理对象的延迟加载导航属性

时间:2015-04-28 12:31:38

标签: .net entity-framework-6 lazy-loading

我已经定义了两个具有一对多外键关系的类,首先由Entity Framework 6.0数据库生成。

public class car
{
    public Nullable<int> label_id { get; set; }
    public virtual label label { get; set; }
}

public class label
{
    public virtual ObservableCollection<car> cars { get; set; }
}

我创建了一个代理对象并将其添加到DBContext

 car c = _context.cars.Create();
_context.cars.Add(c);

然后我设置了一个外键属性并尝试访问相应的导航属性。

c.label_id = 4;
label l = c.label;

设置外键属性 label_id 不会加载导航属性标签。代码中的最后一行返回null

课程遵循此处列出的要求 Requirements for Creating POCO Proxies (调试显示创建了一个代理汽车对象,所以我相信所有要求都得到满足。)

数据库表标签包含主键为4的项目。

我没有在此致电SaveChangesDetectChanges,因为我认为我不应该这样做。

此文档How to: Use Lazy Loading to Load Related Objects表示&#34; 启用延迟加载后,相关对象在通过导航属性访问时会加载&#34;。

我没有禁用延迟加载,我手边有一个代理对象但是当我尝试访问它时没有加载导航属性。

可能是什么原因?

1 个答案:

答案 0 :(得分:0)

我不确定你是否可以在没有先保存更改的情况下获取对象的延迟加载(从未尝试过或信任它)。但是,您是否检查过延迟加载选项是否设置为true?我确定是的,但我先问的是简单的问题。

var lazyLoadingIsTrue = _context.ContextOptions.LazyLoadingEnabled == true;