![](/img/trans.png)
[英]Entity Framework TPH changing discriminator column in an abstract base class and empty inherited class scenario
[英]Entity Framework 6 - Removed default discriminator column for inherited abstract class - error 3032: Problem in mapping
錯誤:
error 3032: Problem in mapping fragments starting at line: Condition member '' with a condition other than 'IsNull=False' is mapped. Either remove the condition on or remove it from the mapping.
碼:
public enum MyEnum
{
Value1, Value2
}
public class MyBaseClass
{
public MyEnum MyEnum { get; protected set; }
}
public class DerivedOne: MyBaseClass
{
public DerivedOne()
{
MyEnum = MyEnum.Value1;
}
public string MyDerivedOneString { get; set; }
}
public class DerivedTwo: MyBaseClass
{
public DerivedTwo()
{
MyEnum = MyEnum.Value2;
}
}
public class MyDbContext : DbContext
{
DbSet<MyBaseClass> MyBaseClass { get; set; }
DbSet<DerivedOne> DerivedOne { get; set; }
DbSet<DerivedTwo> DerivedTwo { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<MyBaseClass>()
.Map<DerivedOne>(x => x.Requires("MyEnum").HasValue((int)MyEnum.Value1))
.Map<DerivedTwo>(x => x.Requires("MyEnum").HasValue((int)MyEnum.Value2));
}
}
static void Main(string[] args)
{
var db = new MyDbContext();
var derivedOne = new DerivedOne();
derivedOne.MyDerivedOneString = "test";
db.DerivedOne.Add(derivedOne);
//Exception
db.SaveChanges();
}
像這樣解決了它,這是每個表的表(TPH)繼承錯誤:
未顯示的類未編輯。
public abstract class MyBaseClass
{
[NotMapped]
public MyEnum MyEnum { get; protected set; }
}
public class MyDbContext : DbContext
{
DbSet<MyBaseClass> MyBaseClass { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<MyBaseClass>()
.Map<DerivedOne>(x => x.Requires("MyEnum").HasValue((int)MyEnum.Value1))
.Map<DerivedTwo>(x => x.Requires("MyEnum").HasValue((int)MyEnum.Value2));
}
}
static void Main(string[] args)
{
var db = new MyDbContext();
var derivedOne = new DerivedOne();
derivedOne.MyDerivedOneString = "test";
db.MyBaseClass.Add(derivedOne);
db.SaveChanges();
var test = db.MyBaseClass.OfType<DerivedOne>().FirstOrDefault();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.