EF6 - Отображение внешнего ключа TPH в производных классах с использованием свойства базового класса

Я использую Entity Framework 6.0.2 с существующей базой данных, в которой теги хранятся в одной таблице, которая выглядит следующим образом:

Id: int, первичный ключTagType: string, определить тип тега, "usertag" или "movietag"ItemId: int, содержит идентификатор элемента, на который ссылается (идентификатор пользователя или идентификатор фильма)

Следующие классы описывают эту ситуацию:

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

Как вы можете видеть, мои производные классы имеют свойства навигации, которые поддерживаются значениемItemId недвижимость в базовом классе. Мое сопоставление выглядит следующим образом:

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

Теперь, когда я пытаюсь использовать это отображение, используя следующий код, я получаю исключение:

using System.Data.Entity;

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

Исключение, которое выдается:

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

ДаItemId свойство не объявлено по типуUserTag, но наследуется от базыTag класс. Мне кажется, что это отображение должно быть возможным. Это ошибка или ограничение в Entity Framework 6?

Ответы на вопрос(1)

Ваш ответ на вопрос