我的模型如下:
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:类型&#39; ItemCat&#39;无法按定义映射,因为它映射了使用实体拆分或其他形式的继承的类型的继承属性。选择不同的继承映射策略,以便不映射继承的属性,或更改层次结构中的所有类型以映射继承的属性并不使用拆分
更新:我还阅读了this
答案 0 :(得分:0)
找到答案。只需删除ItemCatConfig类中的地图。
Map(m => { m.ToTable("ItemCats"); m.MapInheritedProperties(); });
在TPC中,抽象类没有在db中实现。 ItemCat继承自抽象类,并且它不需要显式地映射配置。