【发布时间】:2012-04-02 20:32:51
【问题描述】:
我应该在 EF 代码优先或模型优先之间做出选择。
我不确定什么是提高开发效率的最佳解决方案和最简单的 IoC 框架集成解决方案。
我尝试先从代码开始,但无法将导航属性用作 IQueryable。当我声明导航属性时,我使用 ICollection,例如:
public class Invoice {
...
public ICollection<LineItem> LineItems { get; set; }
...
}
和
public class LineItem {
...
public Invoice Invoice { get; set; }
...
}
加载 Invoice 时,由于延迟加载,我的 LineItems 集合为空。
但是,当我从数据库加载此属性时,我是否会先从数据库加载此 Invoice 的所有 LineItem,然后才能将此 Collection 用作 IQueryable?
我的想法是使用 IQueryable 尽可能减少数据库加载以提高性能。
我做错了什么?最佳做法是什么?
当我首先使用数据库时,我可以将导航属性用作开箱即用的 IQueryable,而无需编写任何代理类或包装器。
谢谢
【问题讨论】:
-
“我的导航属性为 IQueryable” - 这并不总是一个优点。
-
为什么?我可以在数据库受到干扰之前将查询应用于我的集合属性以构建 SQL 查询
-
看起来延迟加载正在做你想要的,延迟对数据库的实际查询,直到你实际访问记录/实体。但在某些情况下,您将不得不执行 Eagerloading 或关闭延迟加载/代理,不过这将是另一回事。
标签: c# entity-framework database-design