Linq to entities 急迫加载&;LINQ到实体
据我所知,LINQ to entities鼓励使用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类是
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框架中使用存储库模式的示例如何?