EF6 - Mapowanie klucza obcego TPH w klasach pochodnych przy użyciu właściwości klasy bazowej

Używam Entity Framework 6.0.2 z istniejącą bazą danych, w której tagi są przechowywane w pojedynczej tabeli, która wygląda tak:

Id: int, klucz podstawowyTagType: string, określ typ tagu „usertag” lub „movietag”ItemId: int, zawiera identyfikator przedmiotu, do którego się odnosi (identyfikator użytkownika lub identyfikator filmu)

Następujące klasy opisują tę sytuację:

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; }
}

Jak widać, moje klasy pochodne mają właściwości nawigacyjne, które są wspierane przez wartośćItemId właściwość w klasie bazowej. Moje mapowanie wygląda następująco:

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);
    }
}

Teraz, gdy próbuję użyć tego odwzorowania przy użyciu następującego kodu, otrzymuję wyjątek:

using System.Data.Entity;

class Program
{
    static void Main()
    {
        using (var db = new Context())
        {
            db.Database.Delete();
            db.Database.Initialize(false);
        }
    }
}

Wyjątkiem jest:

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

takItemId właściwość nie jest zadeklarowana na typieUserTag, ale jest odziedziczony z bazyTag klasa. Wydaje mi się, że to mapowanie powinno być możliwe. Czy jest to błąd lub ograniczenie w Entity Framework 6?

questionAnswers(1)

yourAnswerToTheQuestion