在第二层上包括几个参考文献

假设我们有这个模型:

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 表等等。使用 Include/ThenInclude API,我可以编写如下代码:

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

但是在 Titre 属性之后,我不能包含其他引用,比如 TypeContact、 Langue、 fontion... Include 方法建议使用 Tiers 对象,而 then Include 建议使用 Titre 对象,而不是 Contact 对象。如何包括联系人列表中的所有引用?我们可以通过一条指令实现这一点吗?

53420 次浏览

.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.

为了完整起见:

也可以像下面这样直接通过 Include 以防它们不是集合属性包含嵌套属性:

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