我应该首先在EF代码或模型之间做出选择。代码第一和数据加载
我不确定开发效率和IoC框架集成最简单的解决方案的最佳解决方案是什么。
我试着先从代码开始,但我无法将导航属性作为IQueryable使用。当我宣布导航属性我使用的ICollection这样的:
public class Invoice {
...
public ICollection<LineItem> LineItems { get; set; }
...
}
和
public class LineItem {
...
public Invoice Invoice { get; set; }
...
}
当我打开发票,我收集了LineItem是因为懒加载空。
但是,当我从数据库加载此属性时,我会加载该数据库的所有LineItems数据库之前,我可以使用此集合作为IQueryable?
我的想法是使用IQueryable使数据库加载尽可能最小以提高性能。
我在做什么错了?最佳做法是什么?
当我首先使用数据库时,我可以使用我的导航属性作为IQueryable开箱即用,无需编写任何代理类或包装器。
谢谢
“我的导航属性为IQueryable” - 这不总是一个加号。 – 2012-03-17 16:55:53
为什么?我可以将一个查询应用到我的集合属性中,以在数据库受到干扰之前构建SQL查询 – xwrs 2012-03-17 17:00:59
看起来像lazyloading正在做您想要什么,将实际查询延迟到数据库,直到您实际访问记录/实体。但是在某些情况下,您将不得不进行预先加载或关闭lazyloading/proxy,尽管这将是不同的故事。 – 2012-03-17 17:41:35