使用以下DDD和存储库模式,是否可以返回聚合根对象及其已包含的子数据而不是使用延迟加载?
e.g。我有一个仓库实体作为聚合根,它有一个名为location的子对象。
在存储库中,我有一个方法来查询位置Id但是传回仓库实体。
dim warehouse as Warehouse = warehouseRepository.FindByLocationId(Id as int32).
dim locationName as string = warehouse.location.where(function(x) x.Id = 1).firstordefault.name
当我使用warehouse.location时,EF使用代理类触发另一个数据库查询来检索位置数据。 在我的存储库方法FindByLocationId中,我可以查询位置数据库表并使用包含的位置数据传回仓库实体吗?
答案 0 :(得分:1)
通常,要停止延迟加载和代理,您可以在 DbContext 类的配置属性上设置以下属性。我倾向于在覆盖 OnModelCreating()方法时执行此操作,因此我的所有'设置'东西在一起。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
base.OnModelCreating(modelBuilder);
}
如果您想急切加载某个属性,可以使用包含()方法:
var wareHouse = (from w in ctx.WareHouses.Include("location")
select w).FirstOrDefault();
答案 1 :(得分:0)
我认为您只想在查询中使用include
选项。 http://msdn.microsoft.com/en-us/library/bb896272.aspx
所以你会有这样的事情:
var data = (from w in context.Warehouse
.Include("Location")
select w).FirstOrDefault();