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 はプロキシ クラスを使用して別の DB クエリを起動し、位置データを取得します。私のリポジトリ メソッド FindByLocationId で、場所 DB テーブルをクエリし、場所データを含む倉庫エンティティを返すことはできますか?

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 に答える