所以我一直觉得我应该关闭延迟加载,原因有两个:
当然,只要我们小心,这两个问题都可以避免,但在性能有些重要的项目中似乎有点不必要的风险。
作为旁注,我发现1- *关系属性变为null
而不是在延迟加载时访问它们时抛出异常是很奇怪的。我想回过头来处理单个查询中的所有内容,但我担心我可能忽略了一个错误,即我将一个尚未加载的0- *关系解释为null
。
思想?
答案 0 :(得分:6)
如果您不担心表现,请关闭延迟加载。
就个人而言,我们关闭延迟加载,显式允许通过我们的存储库的接口契约包含导航属性,例如:
ICollection<Person> FindSingle(int personId, string[] includeAssociations);
因此,只有在调用代码专门请求时,我们才会急切加载导航属性。这就像是在对代码说:“嘿,如果你想要关于这个T的额外信息,那就请它,否则你就不会开始了!”。
对于1- *,当然属性为null。导航属性通常在对象上实现为ICollection<T>
,因此如果没有任何内容,则不会实例化集合。
你可以通过在执行查询时创建一个空集合而不是null集合来抵消这种效果。但是,我更喜欢将null集合添加到具有0个项目的实例化集合中。