NotSupportedException: тип A не может быть сопоставлен как definede. Стол на бетон (TPC) EF6

У меня есть модель, как:

public abstract class Entity   
 {    
    public int Id { get; set; }  
  }

public abstract  class Tree : Entity
    {
        public Tree() { Childs = new List<Tree>(); }

        public int? ParentId { get; set; }

        public string Name { get; set; }

        [ForeignKey("ParentId")]
        public ICollection<Tree> Childs { get; set; }

    }

 public  abstract class Cat : Tree
    {

        public string ImageUrl { get; set; }

        public string Description { get; set; }

        public int OrderId { get; set; }

    }

  public class ItemCat : Cat
        {
            ...
            public virtual ICollection<Item> Items { get; set; }
        }

и настройки классов:

public class CatConfig : EntityTypeConfiguration<Cat>
    {
        public CatConfig()
        {
            //properties
            Property(rs => rs.Name).IsUnicode();
            Property(rs => rs.ImageUrl).IsUnicode();
            Property(rs => rs.Description).IsUnicode();
        }
    }

 public class ItemCatConfig :EntityTypeConfiguration<ItemCat>
    {
        public ItemCatConfig()
        {

            Map(m => { m.ToTable("ItemCats"); m.MapInheritedProperties(); });
        }
    }

и DbContext:

public class Db :  IdentityDbContext<MehaUser>
    {
        public Db():base("Db")
        {
        }

        public DbSet<ItemCat> ItemCats { get; set; }
    }
 protected override void OnModelCreating(DbModelBuilder mb)
        {
            mb.Configurations.Add(new ItemCatConfig());

            base.OnModelCreating(mb);
        }

но получите:

System.NotSupportedException: тип ItemCat не может быть сопоставлен как определено, потому что он отображает унаследованные свойства из типов, которые используют разделение сущности или другую форму наследования. Либо выберите другую стратегию отображения наследования, чтобы не отображать унаследованные свойства, либо измените все типы в иерархии, чтобы отобразить унаследованные свойства и не использовать разбиение

Обновление: я тоже читаю это

1 ответ

Найти ответ. просто удалите Map в классе ItemCatConfig.

 Map(m => { m.ToTable("ItemCats"); m.MapInheritedProperties(); });

В TPC абстрактные классы не реализуются в БД. ItemCat наследуется от абстрактных классов и не требует явного отображения конфигурации.

Другие вопросы по тегам