Ich habe Tabelle pro Hierarchie Entity Data Model mit einem abstrakten Dokument Entität und mehreren abgeleiteten Einheiten (Blog, Seite, ...) implementiert. Ich habe Repository-Schnittstelle mit Methodensignaturen Document Entität wie dieseTabelle pro Hierarchie Implementierung mit Entity Framework und Repository Muster
public Document Load(Guid firmId, int prettyId)
{
// the OfType<> can be OfType<Page>, OfType<Blog>, ...
var instance = (from c in _ctx.Documents.OfType<X>() where c.firm_id == firmId && c.PrettyId == prettyId select c).FirstOrDefault();
...
}
ich mit nur einer Klasse, die das Repository implementiert und es Dokument als Typ von Methoden zurückzukehren verwendet. Ich brauche keine benutzerdefinierten Implementierungen für verschiedene Typen, die von Document abgeleitet sind, da die Implementierungsspezifikationen für das Laden, Einfügen und Aktualisieren für alle gleich sind. Ich muss nur den Typ für die Methoden identifizieren/bereitstellen, mit denen wir arbeiten möchten.
Hoffentlich werden Sie verstehen, was ich meine. Bitte antworten Sie nicht mit Referenzen darauf, wie man das TPH modelliert, weil ich das schon gemacht habe und es ist gut modelliert.
Yup, das ist was ich tue. Generika sind ein guter Fall, wenn irgendeine Art von Polymorphismus (z. B. abstrakte Klassen) verwendet wird. Was Ihre Schnittstelle betrifft, gibt es keinen Unterschied zwischen der ersten oder der zweiten (auskommentierten). Einer hat einen Typparameter/eine Einschränkung von T, der andere T1. Dies sind nur Aliase für den Typ-Parameter - sie können alles sein, macht keinen Unterschied. In Ihrem Fall würde ich sie "TDocument" nennen, um expliziter zu sein. Was die Implementierung betrifft, würde ich '.Load()' nicht für alle Typen verwenden, da die Methodensignatur dies nicht vorschreibt. Ich würde das über Erweiterungsmethoden tun. – RPM1984
Oh, und gut gemacht, dies auch für sich selbst herauszufinden - +1. – RPM1984
Können Sie ein Beispiel für Erweiterungsmethoden zum Referenzladen bereitstellen? – mare