1. ホーム
  2. entity-framework

[解決済み] Entity Framework 5で子オブジェクトの子オブジェクトをインクルードする方法

2022-04-23 10:48:07

質問

を使用しています。 Entity Framework 5 code firstASP.NET MVC 3 .

子オブジェクトの子オブジェクトを取得するのに苦労しています。 以下は私のクラスです。

アプリケーションクラスです。

public class Application
{
     // Partial list of properties

     public virtual ICollection<Child> Children { get; set; }
}

子クラスです。

public class Child
{
     // Partial list of properties

     public int ChildRelationshipTypeId { get; set; }

     public virtual ChildRelationshipType ChildRelationshipType { get; set; }
}

ChildRelationshipType クラスです。

public class ChildRelationshipType
{
     public int Id { get; set; }

     public string Name { get; set; }
}

リポジトリ内のGetAllメソッドの一部で、すべてのアプリケーションを返すことができます。

return DatabaseContext.Applications
     .Include("Children");

Child クラスは、ChildRelationshipType クラスへの参照を含んでいます。 アプリケーションの子を操作するために、私はこのようなものを用意します。

foreach (Child child in application.Children)
{
     string childName = child.ChildRelationshipType.Name;
}

ここで、オブジェクトコンテキストが既に閉じられているというエラーが発生します。

各子オブジェクトに ChildRelationshipType オブジェクトを作成できますか?

どのように解決するのですか?

ライブラリをインクルードする場合 System.Data.Entity のオーバーロードを使用することができます。 Include() メソッドは、文字列の代わりにラムダ式を受け取ります。そうすると Select() でなく、Linq 式を使った子プロセスの上に string のパスがあります。

return DatabaseContext.Applications
     .Include(a => a.Children.Select(c => c.ChildRelationshipType));