DDD EF存储库

时间:2012-06-07 08:40:44

标签: entity-framework repository domain-driven-design aggregateroot

使用以下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中,我可以查询位置数据库表并使用包含的位置数据传回仓库实体吗?

2 个答案:

答案 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();