Generische Find() mit Umfasst Entity Framework
Momentan habe ich eine komplette generisches repository, aber mir fehlt ein feature und das ist, zu verwenden
Include() und Find()
zusammen.
So, jetzt habe ich:
public E FindById<E>(int id) where E : class
{
return DataContext.Set<E>().Find(id);
}
nannte, mit
var person = PersonRepo.FindById<Person>(personId);
Ich würde gerne etwas ähnliches:
var person = PersonRepo.FindByIdWithIncludes<Person>(personId,new[]{"State.Address"});
So, etwas entlang dieser Linien (dies ist nur ein test):
public E FindByIdWithIncludes<E>(int id, string[] includes) where E : class
{
var entitySet = DataContext.Set<E>();
DbQuery<E> entityQuery;
foreach (var include in includes)
{
entityQuery = entitySet.Include(include);
}
return entityQuery.Find(id); //this is were it breaks
}
Ist es möglich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht verwenden
Find
direkt -Find
funktioniert nicht mit umfasst. Müssen SieSingleOrDefault
.Zuerst müssen Sie definieren Schnittstelle für Ihre Entitäten zu setzen Ihre Schlüssel.
Weiter, schreiben Sie einfachen Methode mit Zwangsbedingungen, um Zugang zu dem Schlüssel:
Btw. Sie können stark typisierte umfasst - hier ist ein Beispiel.
Könnten Sie auch anders herum zu nutzen
Find
, aber in Kombination mitLoad
. In einigen Fällen ist möglicherweise leistungsstärker als dieInclude-SingleOrDefault
, aber es hängt wirklich davon ab, das Szenario.Nicht-generische Beispiel:
Sollte nicht schwer sein, um es allgemein zu Ihren Bedürfnissen.
Include
OTOH würde es erlauben, Holen alle Daten, die mit einer einfachen Abfrage. Obwohl diese Lösung funktioniert, ist es wichtig zu verstehen, es kann nicht immer einen passenden Ersatz zuInclude
Erweiterung.