代码优先和数据加载
本文关键字:数据 加载 代码 | 更新日期: 2023-09-27 18:28:03
我应该在EF代码优先还是模型优先之间做出选择。
我不确定什么是提高开发效率的最佳解决方案,什么是IoC框架集成的最简单解决方案。
我尝试先从代码开始,但无法将导航属性用作IQueryable。当我声明导航属性时,我使用ICollection,如:
public class Invoice {
...
public ICollection<LineItem> LineItems { get; set; }
...
}
和
public class LineItem {
...
public Invoice Invoice { get; set; }
...
}
加载Invoice时,由于延迟加载,我的LineItems集合为空。
但是,当我从数据库加载此属性时,在我可以将此集合用作IQueryable之前,我会从数据库加载该发票的所有行项目吗?
我的想法是使用IQueryable使数据库负载尽可能小,以提高性能。
我做错了什么?最佳实践是什么?
当我第一次使用数据库时,我可以使用我的导航属性作为开箱即用的IQueryable,而无需编写任何代理类或包装器。
感谢
您需要使所有实体属性都是虚拟的。这允许EF为您的实体生成一个代理类,这样您就可以对其进行查询
public class Invoice {
public virtual ICollection<LineItem> LineItems { get; set; }
}
您需要Virtual
关键字才能使Lazyloading工作。