web-dev-qa-db-ja.com

第2レベルに複数の参照を含める

このモデルがあると仮定します:

public class Tiers
{
    public List<Contact> Contacts { get; set; }
}

そして

public class Contact
{
    public int Id { get; set; }
    public Tiers Tiers { get; set; }
    public Titre Titre { get; set; }
    public TypeContact TypeContact { get; set; }
    public Langue Langue { get; set; }
    public Fonction Fonction { get; set; }
    public Service Service { get; set; }
    public StatutMail StatutMail { get; set; }
}

EF7では、Tiersテーブルから、Contactテーブルから、Titreテーブルから、TypeContactテーブルからなど、すべてのデータを1つの命令で取得したいと思います。 Include/ThenInclude APIを使用すると、次のように記述できます。

_dbSet
     .Include(tiers => tiers.Contacts)
          .ThenInclude(contact => contact.Titre)
     .ToList();

しかし、Titreプロパティの後に、TypeContact、Langue、Fonctionなどの他の参照を含めることはできません... IncludeメソッドはTiersオブジェクトを提案し、ThenIncludeはContactオブジェクトではなくTitreオブジェクトを提案します。連絡先のリストからすべての参照を含めるにはどうすればよいですか?単一の命令でこれを達成できますか?

66

.ThenInclude()は、最後の.ThenInclude()または最後の.Include()(どちらか新しい方)からチェーンを取り、複数のレベルを取り込みます。同じレベルに複数の兄弟を含めるには、別の.Include()チェーンを使用します。コードを適切にフォーマットすると、読みやすさが大幅に向上します。

_dbSet
    .Include(tiers => tiers.Contacts).ThenInclude(contact => contact.Titre)
    .Include(tiers => tiers.Contacts).ThenInclude(contact => contact.TypeContact)
    .Include(tiers => tiers.Contacts).ThenInclude(contact => contact.Langue);
    // etc.
112
bricelam

完全を期すために:

ネストされたプロパティをInclude経由で直接含めることもできますそれらがコレクションプロパティでない場合

_dbSet
    .Include(tier => tier.Contact.Titre)
    .Include(tier => tier.Contact.TypeContact)
    .Include(tier => tier.Contact.Langue);
1
Risadinha