Linq to entities 急迫加载&;LINQ到实体

Linq to entities 急迫加载&;LINQ到实体,linq-to-entities,Linq To Entities,据我所知,LINQ to entities鼓励使用Load()或Include()进行急切加载。但是,我想知道,在多层应用程序中,应该在哪里进行急切的加载 数据访问层(封装实体实例的存储库类)有一个通用的Item GetItem(int-id)函数,而在业务逻辑层中有吗 Item item = dbRepository.GetItem(itemId); if (!item.itemDetails.IsLoaded) item.itemDetails.Load() 或者repository类是

据我所知,LINQ to entities鼓励使用
Load()
Include()
进行急切加载。但是,我想知道,在多层应用程序中,应该在哪里进行急切的加载

数据访问层(封装实体实例的存储库类)有一个通用的
Item GetItem(int-id)
函数,而在业务逻辑层中有吗

Item item = dbRepository.GetItem(itemId);
if (!item.itemDetails.IsLoaded)
 item.itemDetails.Load()
或者repository类是否应该具有不同的显式函数来加载不同的外部关系,从而返回所加载关系的项

非常感谢

编辑: 示例-


此函数返回一个
联系人
实体类型。但是,根据业务逻辑需要,我们可能希望
Load()
Include()
联系人的不同对外关系。这个要求是否意味着我们需要更多重载的
GetContact()
方法,这些方法带有指示要加载哪些关系的参数,或者只需在业务逻辑中执行
load()
。相反,我使用LINQ将实体类型映射到表示模型类型。在这种情况下,您根本不必考虑加载。例如:

var presentationModel = (from entity in Repository.Entities
                         select new PresentationEntity ()
                         {
                             Prop = entity.Prop,
                             ChildProp = entity.Child.Prop
                         }).First();

请注意,我不必考虑加载孩子。当您投影到不同的类型时,LINQ to entities会为您执行此操作。

在大多数情况下,我不会执行任何一种操作。相反,我使用LINQ将实体类型映射到表示模型类型。在这种情况下,您根本不必考虑加载。例如:

var presentationModel = (from entity in Repository.Entities
                         select new PresentationEntity ()
                         {
                             Prop = entity.Prop,
                             ChildProp = entity.Child.Prop
                         }).First();

请注意,我不必考虑加载孩子。当您投影到其他类型时,LINQ to entities会帮您完成这项工作。

谢谢您的回答。这种逻辑应该在哪里发生?如果我们在模型层(我假设是MVC)中进行映射,那么我们不是把模型类和表示模型混为一谈了吗,这样数据访问层就需要知道表示模型了吗?从存储库类型映射到表示模型类型(反之亦然)应该在控制器中。这意味着linq查询也将在控制器中?(对不起,我对这个很陌生)是的。在控制器中使用LINQ没有什么错,只要您没有重新实现应该在存储库中的功能。LINQ是一种将一种类型的列表转换为另一种类型的列表的系统。这个功能在很多地方都很有用。Hrmmm,我明白你的意思,但是我们这里可能对存储库有不同的定义。关于MVC框架中使用存储库模式的示例如何?谢谢您的回答。这种逻辑应该在哪里发生?如果我们在模型层(我假设是MVC)中进行映射,那么我们不是把模型类和表示模型混为一谈了吗,这样数据访问层就需要知道表示模型了吗?从存储库类型映射到表示模型类型(反之亦然)应该在控制器中。这意味着linq查询也将在控制器中?(对不起,我对这个很陌生)是的。在控制器中使用LINQ没有什么错,只要您没有重新实现应该在存储库中的功能。LINQ是一种将一种类型的列表转换为另一种类型的列表的系统。这个功能在很多地方都很有用。Hrmmm,我明白你的意思,但是我们这里可能对存储库有不同的定义。关于MVC框架中使用存储库模式的示例如何?