我应首先在EF代码或模型之间做出选择。
我不确定什么是开发效率的最佳解决方案和IoC框架集成的最简单解决方案。
我尝试先从代码开始,但我无法将导航属性用作IQueryable。当我声明导航属性时,我使用ICollection,如:
public class Invoice {
...
public ICollection<LineItem> LineItems { get; set; }
...
}
和
public class LineItem {
...
public Invoice Invoice { get; set; }
...
}
当我加载Invoice时,由于延迟加载,我的LineItems集合为空。
但是当我从数据库加载此属性时,我会从数据库中加载此Invoice的所有LineItems,然后才能将此Collection用作IQueryable吗?
我的想法是使用IQueryable尽可能减少数据库加载以提高性能。
我做错了什么?什么是最佳做法?
当我首先使用数据库时,我可以使用我的导航属性作为IQueryable开箱即用,而无需编写任何代理类或包装器。
谢谢
答案 0 :(得分:0)
您需要将所有实体属性设为虚拟。这允许EF为您的实体生成代理类,以便您可以对其进行查询。
public class Invoice {
public virtual ICollection<LineItem> LineItems { get; set; }
}
答案 1 :(得分:0)
您需要 Virtual
关键字以使延迟加载工作。