0

通过遵循 DDD 和存储库模式,是否可以返回已经包含其子数据的聚合根对象,而不是使用延迟加载?

例如,我有一个仓库实体作为聚合根,它有一个名为 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 中,我可以查询位置数据库表并传回包含位置数据的仓库实体吗?

4

2 回答 2

1

通常,要停止延迟加载和代理,您可以在DbContext类的Configuration属性上设置以下属性。我倾向于在覆盖OnModelCreating()方法时这样做,所以我所有的“设置”东西都在一起。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Configuration.LazyLoadingEnabled = false;
        Configuration.ProxyCreationEnabled = false;


        base.OnModelCreating(modelBuilder);
    }

如果你想急切地加载一个属性,你可以使用Include()方法:

var wareHouse = (from w in ctx.WareHouses.Include("location")
                select w).FirstOrDefault();
于 2012-06-07T09:45:31.283 回答
0

我想您只想include在查询中使用该选项。http://msdn.microsoft.com/en-us/library/bb896272.aspx

所以你会有这样的事情:

var data = (from w in context.Warehouse
            .Include("Location")
            select w).FirstOrDefault();
于 2012-06-07T09:41:53.187 回答