C# 实体框架6-已删除继承抽象类的默认鉴别器列-错误3032:映射中存在问题

C# 实体框架6-已删除继承抽象类的默认鉴别器列-错误3032:映射中存在问题,c#,asp.net,.net,entity-framework,entity-framework-6,C#,Asp.net,.net,Entity Framework,Entity Framework 6,错误: 代码: 公共枚举MyEnum { 价值1,价值2 } 公共类MyBaseClass { public MyEnum MyEnum{get;protected set;} } 公共类DerivedOne:MyBaseClass { 公共衍生电话() { MyEnum=MyEnum.Value1; } 公共字符串MyDerivedOneString{get;set;} } 公共类派生二:MyBaseClass { 公之于众 { MyEnum=MyEnum.Value2; } } 公共类M

错误:

代码:

公共枚举MyEnum
{ 
价值1,价值2
}
公共类MyBaseClass
{ 
public MyEnum MyEnum{get;protected set;}
}
公共类DerivedOne:MyBaseClass
{
公共衍生电话()
{
MyEnum=MyEnum.Value1;
}
公共字符串MyDerivedOneString{get;set;}
}
公共类派生二:MyBaseClass
{
公之于众
{
MyEnum=MyEnum.Value2;
}
}
公共类MyDbContext:DbContext
{
DbSet MyBaseClass{get;set;}
DbSet-DerivedOne{get;set;}
DbSet DERIVEDTOW{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.Map(x=>x.Requires(“MyEnum”).HasValue((int)MyEnum.Value1))
.Map(x=>x.Requires(“MyEnum”).HasValue((int)MyEnum.Value2));
}
}
静态void Main(字符串[]参数)
{
var db=new MyDbContext();
var derivedOne=新的derivedOne();
derivedOne.MyDerivedOneString=“测试”;
db.DerivedOne.Add(DerivedOne);
//例外情况
db.SaveChanges();
}

这样解决它,这是一个逐层次表(TPH)继承错误:

未显示的类不会被编辑

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();
}
公共抽象类MyBaseClass
{ 
[未映射]
public MyEnum MyEnum{get;protected set;}
}
公共类MyDbContext:DbContext
{
DbSet MyBaseClass{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.Map(x=>x.Requires(“MyEnum”).HasValue((int)MyEnum.Value1))
.Map(x=>x.Requires(“MyEnum”).HasValue((int)MyEnum.Value2));
}
}
静态void Main(字符串[]参数)
{
var db=new MyDbContext();
var derivedOne=新的derivedOne();
derivedOne.MyDerivedOneString=“测试”;
db.MyBaseClass.Add(derivedOne);
db.SaveChanges();
var test=db.MyBaseClass.OfType().FirstOrDefault();
}
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();
}
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();
}