Mehrfachvererbung mit Entity Framework TPC
Ich habe versucht, einige Klassen mithilfe von Entity Framework im TPC-Stil zuzuordnen. Dabei ist der folgende Fehler aufgetreten:
Fehler: Der Typ 'A' kann nicht wie definiert zugeordnet werden, da er geerbte Eigenschaften von Typen abbildet, die die Entitätsteilung oder eine andere Form der Vererbung verwenden. Wählen Sie entweder eine andere Vererbungszuordnungsstrategie aus, um geerbte Eigenschaften nicht zuzuordnen, oder ändern Sie alle Typen in der Hierarchie, um geerbte Eigenschaften zuzuordnen und keine Aufteilung zu verwenden.
Dieser Fehler tritt auf, wenn ich die folgenden Klassen verwende:
public abstract class BaseEntityTest
public abstract class BaseEntityTest2 : BaseEntityTest
public abstract class BaseEntityTest3 : BaseEntityTest2
public class A: BaseEntityTest3 // this class is the only one with a table in the db
In der OnModelCreating-Methode habe ich den folgenden Code hinzugefügt, um die TPC-Zuordnung zu erhalten
modelBuilder.Entity<A>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("A");
});
Wenn ich BaseEntityTest2 aus der Struktur ausschließe (sodass A nur von BaseEntityTest anstelle von BaseEntityTest2 erbt), wird der Fehler behoben. Bedeutet das, dass es nicht möglich ist, dieses Mapping zu erstellen oder vermisse ich einfach etwas?
BEARBEITEN:
Eigenschaften von Klassen:
public abstract class BaseEntityTest
{
[Key]
public Guid Id { get; set; }
public String Info { get; set; }
[Required]
public DateTime CreationDate { get; set; }
[Required]
public String CreationUser { get; set; }
[Required]
public DateTime ModificationDate { get; set; }
[Required]
public String ModificationUser { get; set; }
[ConcurrencyCheck]
[Required]
public int LockVersion { get; internal set; }
}
public abstract class BaseEntityTest2 : BaseEntityTest
{
[Required]
public string Name { get; set; }
public string Description { get; set; }
}
public abstract class BaseEntityTest3: BaseEntityTest2
{
[Required]
public DateTime FromDate { get; set; }
public DateTime ThruDate { get; set; }
}
public class A: BaseEntityTest3{
public String Test { get; set; }
}