EF6 - TPH-Fremdschlüsselzuordnung in abgeleiteten Klassen unter Verwendung der Basisklasseneigenschaft
Ich verwende Entity Framework 6.0.2 mit einer vorhandenen Datenbank, in der Tags in einer einzelnen Tabelle gespeichert sind, die wie folgt aussieht:
Id
: int, PrimärschlüsselTagType
: string, bestimme den Typ des Tags, entweder "usertag" oder "movietag"ItemId
: int, enthält die ID des Elements, auf das verwiesen wird (entweder eine Benutzer-ID oder eine Film-ID)Die folgenden Klassen beschreiben diese Situation:
public class User
{
public int Id { get; set; }
}
public class Movie
{
public int Id { get; set; }
}
public abstract class Tag
{
public int Id { get; set; }
public int ItemId { get; set; }
}
public class UserTag : Tag
{
public virtual User User { get; set; }
}
public class MovieTag : Tag
{
public virtual Movie Movie { get; set; }
}
Wie Sie sehen können, haben meine abgeleiteten Klassen Navigationseigenschaften, die durch den Wert von "" unterstützt werdenItemId
Eigenschaft in der Basisklasse. Meine Zuordnung ist wie folgt:
public class Context : DbContext
{
public DbSet<Tag> Tags { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Tag>()
.Map<UserTag>(m => m.Requires("TagType").HasValue("usertag"))
.Map<MovieTag>(m => m.Requires("TagType").HasValue("movietag"));
modelBuilder.Entity<UserTag>()
.HasRequired(m => m.User).WithMany().HasForeignKey(m => m.ItemId);
modelBuilder.Entity<MovieTag>()
.HasRequired(m => m.Movie).WithMany().HasForeignKey(m => m.ItemId);
}
}
Wenn ich jetzt versuche, diese Zuordnung mit dem folgenden Code zu verwenden, wird eine Ausnahme angezeigt:
using System.Data.Entity;
class Program
{
static void Main()
{
using (var db = new Context())
{
db.Database.Delete();
db.Database.Initialize(false);
}
}
}
Die Ausnahme, die ausgelöst wird, ist:
Unhandled Exception: System.InvalidOperationException: The foreign key component 'ItemId' is not a declared property on type 'UserTag'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property
Ja dasItemId
Eigenschaft ist für den Typ nicht deklariertUserTag
, aber es wird von der Basis geerbtTag
Klasse. Mir scheint, dass diese Zuordnung möglich sein sollte. Ist dies ein Fehler oder eine Einschränkung in Entity Framework 6?