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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage