代码优先和数据加载

本文关键字:数据 加载 代码 | 更新日期: 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工作。