到目前为止,LINQ to实体鼓励用Load()
或Include()
加载。但是,我想知道在多层应用程序中应该在哪里进行热切加载?
数据访问层(封装Entity实例的存储库类)具有通用Item GetItem(int id)
函数是否正确,并且在业务逻辑层中执行
Item item = dbRepository.GetItem(itemId);
if (!item.itemDetails.IsLoaded)
item.itemDetails.Load()
或者存储库类是否应该具有不同的显式函数来加载不同的外部关系,因此返回急切加载关系的项?
非常感谢!
修改 示例 - http://www.asp.net/learn/mvc/tutorial-29-cs.aspx
public Contact GetContact(int id)
此函数返回Contact
实体类型。但是,取决于业务逻辑需求,我们可能希望Load()
或Include()
实体的不同外部关系。这个要求是否意味着我们需要更多重载的Contact
方法,其中的参数指示要加载哪些关系,或者只是在业务逻辑中执行GetContact()
?
答案 0 :(得分:0)
在大多数情况下,我不做任何一个。相反,我使用LINQ将我的实体类型映射到表示模型类型。在这种情况下,您根本不必考虑加载。例如:
var presentationModel = (from entity in Repository.Entities
select new PresentationEntity ()
{
Prop = entity.Prop,
ChildProp = entity.Child.Prop
}).First();
请注意,我没有考虑加载Child。当您投影到其他类型时,LINQ to实体会为您执行此操作。