zu verwenden Ich verwende Entity Framework Core zusammen mit Repository-Muster und ich habe ein Problem.Ausnahme beim Versuch, `ThenInclude` in EF Core
Ich habe Klassen Customer
, Company
und Email
denen versteckte Dinge hier nicht relevant, die aussehen wie folgt:
public class Email
{
public int EmailId { get; protected set; }
public string Address { get; protected set; }
public string Description { get; protected set; }
public Email(string address, string description)
{
if (string.isNullOrEmpty(address))
throw new ArgumentException(nameof(address));
if (string.isNullOrEmpty(description))
throw new ArgumentException(nameof(description));
this.Address = address;
this.Description = description;
}
protected Email() { }
}
public class Company
{
public int CompanyId { get; protected set; }
public IList<Email> Emails { get; set; }
}
public class Customer
{
public int CustomerId { get; protected set; }
public Company Company { get; set; }
}
Die Zuordnungen sind so eingestellt, dass es einen Zusammenhang zwischen Customer
Eins-zu-eins und Company
, während es eine Eins-zu-Viele-Assoziation zwischen Company
und Email
gibt.
Auf der CustomersRepository
Ich habe dann die folgende Methode:
public IEnumerable<Customer> GetAll()
{
return _context.Set<Customer>()
.Include(x => x.Company)
.ThenInclude(x => x.Emails)
as IEnumerable<Customer>;
}
Nun ThenInclude
Stück ein Problem gibt. Wenn ich versuche, diese Methode zu verwenden, bekomme ich eine Ausnahme, die besagt, dass source
null ist.
Ich habe alles überprüft, aber ich habe nichts falsch gefunden. Es scheint alles korrekt geschrieben zu sein.
Der springende Punkt ist: Ich habe Entitäten A
, B
, C
so dass A
eine B
hat, und B
viele C
hat, und wenn ich A
abrufen Ich brauche alles verbunden zu bekommen.
Was mache ich hier falsch? Warum bekomme ich diese Ausnahme?
Können Sie nicht einfach '.Include (x => x.Company.Emails)'? – Will
Danke @Will, es funktioniert mit dieser Lösung! Wissen Sie übrigens, warum das 'ThenInclude' nicht funktioniert? Wenn ich die Dokumente verstanden habe, ist das der empfohlene Weg, aber in diesem Fall funktioniert es einfach nicht. – user1620696
Sorry, keine Ahnung. Nie benutzt ThenInclue, weiß nicht, wie es implementiert ist. Lass mich für eine Sekunde hineinschauen und füge eine Antwort hinzu. – Will