2012-12-18 2 views
6

ich für eine Lösung in folgendem Problem suchen:Vererbung in .NET EntityFramework 4.0 für ähnliche Datenbanktabellen

Ich habe viele Tabellen, die in wenigen/keine Spalten voneinander unterscheiden (Warum dies geschieht, ist nicht der Fall da ich die Datenbank nicht entworfen habe und auch nicht ändern kann.

Beispiel: Tabelle Benutzer: Spalten {Name, Vorname, Alter} Tabelle Altnutzer: Spalten (Name, Vorname, Alter, lastDateSeen} etc

Gibt es eine Möglichkeit zum EntityFramework 4.0 in Visual, um anzuzeigen, Studio zum Erweitern einer Basisklasse, die aus _name, _surname, _age Feldern und ihren entsprechenden Eigenschaften besteht, so dass ich diese Klasse für Stapeljobs im Code verwenden kann?

Meine aktuelle Lösung besteht darin, diese Klasse zu erstellen und Konverter zu verwenden, um die Klasse zu bestehen Werte von den persistenten Objekten seine 'Objekte. Es funktioniert, aber es ist nicht elegant und ich mag es nicht.

Ich komme aus einer Java/Hibernate-Umgebung, wo dies grundlegende Funktionalität ist.

(für zukünftige refernce kann das gleiche tun, wenn ich die Klassen will eine Schnittstelle implementieren?)

Vielen Dank im Voraus.

+0

Ist das tatsächlich eine Entitätsrahmenfrage? Ich habe noch nie von Entity Manager gehört. Glücklicherweise beeinflusst die spezielle ORM-Technologie die Antwort auf Ihre Frage nicht. –

+0

Sie haben absolut recht, ich meinte EntityFramework –

+0

Also hat meine Antwort Ihre Frage gelöst? Denn eine genehmigte Antwort würde sicher geschätzt werden! Vielen Dank! –

Antwort

1

Da Ihr RDBMS (mindestens SQL Server 2008 und älter) keine Tabellenvererbung zulässt, würde ich empfehlen, dass Sie die Vererbung im DB-Modell in C# nicht verwenden. Dies wird besonders empfohlen, wenn Sie das Design der Tabellen nicht steuern können.

Verwenden Sie stattdessen eine Schnittstelle, wenn Sie tatsächlich Clients dieser Klassen haben, die von der Abstraktion profitieren, aber nicht in der Lage sein, das Design der DB zu steuern, macht dies weniger wertvoll, da der DB-Designer die Tabellen ändern könnte Klassen implementieren die Schnittstelle nicht mehr:

public interface IUser { 
    public string Name { get; } 
    // etc... 
} 

public class User : IUser { 
    public string Name { get; set; } 
    // etc... 
} 

public class OldUser : IUser { 
    public string Name { get; set; } 
    // rest of IUser 
    public DateTime? LastSeenOn { get; set; } 
}