1. ホーム
  2. c#

[解決済み] Entity Framework - 複数レベルのプロパティを含める

2022-03-22 13:33:53

質問

Include()メソッドは、オブジェクト上のListsに対して非常によく機能します。しかし、2 段階の深さに移動する必要がある場合はどうすればよいでしょうか? 例えば、以下のメソッドは、ここに示すインクルードプロパティを持つApplicationServersを返します。しかし、ApplicationsWithOverrideGroupは、他の複雑なオブジェクトを保持する別のコンテナです。そのプロパティに対してもInclude()を実行できますか?または、そのプロパティを完全に読み込むにはどうすればよいですか?

現状では、この方法だと

public IEnumerable<ApplicationServer> GetAll()
{
    return this.Database.ApplicationServers
        .Include(x => x.ApplicationsWithOverrideGroup)                
        .Include(x => x.ApplicationWithGroupToForceInstallList)
        .Include(x => x.CustomVariableGroups)                
        .ToList();
}

Enabledプロパティ(下記)のみを入力し、ApplicationやCustomVariableGroupプロパティ(下記)は入力しません。これを実現するにはどうしたらよいでしょうか?

public class ApplicationWithOverrideVariableGroup : EntityBase
{
    public bool Enabled { get; set; }
    public Application Application { get; set; }
    public CustomVariableGroup CustomVariableGroup { get; set; }
}

解決方法は?

EF 6の場合

using System.Data.Entity;

query.Include(x => x.Collection.Select(y => y.Property))

を必ず追加してください。 using System.Data.Entity; のバージョンを取得するために Include で、ラムダを取り込んでいます。


EFコア用

新しいメソッドを使用する ThenInclude

query.Include(x => x.Collection)
     .ThenInclude(x => x.Property);