簡體   English   中英

實體框架6-刪除了繼承的抽象類的默認區分符列-錯誤3032:映射問題

[英]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();
}

https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in- AN-ASP凈MVC應用程序

像這樣解決了它,這是每個表的表(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM