我有以下内容(为清楚起见而缩写) - 一个枚举,一个具有该枚举的基类,以及两个将枚举设置为特定值的派生类。
public enum MyEnum
{
Value1, Value2
}
public class MyBaseClass
{
public MyEnum { get; protected set; }
}
public class DerivedOne: MyBaseClass
{
public DerivedOne { MyEnum = MyEnum.Value1; }
}
public class DerivedTwo: MyBaseClass
{
public DerivedTwo { MyEnum = MyEnum.Value2; }
}
我想做的是让 Entity Framework 5 自动区分 DerivedOne 和 DerivedTwo,并使用基于 MyEnum 值的鉴别器。我应该能够这样做,因为按照惯例,每个 MyEnum == MyEnum.Value1 代表 DerivedOne,而 MyEnum == MyEnum.Value2 代表 DerivedTwo。
我在我的 DbContext 中尝试了这个:
public class MyDbContext : DbContext
{
DbSet<MyBaseClass> MyBaseClass { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyBaseClass>()
.Map<DerivedOne>(m => m.Requires(x => x.MyEnum == MyEnum.Value1));
base.OnModelCreating(modelBuilder);
}
}
但是,这会引发以下 InvalidOperationException:
表达式 'x => (Convert(x.MyEnum) == 0)' 不是有效的属性表达式。表达式应该代表一个属性 (...)
编辑:我相信我使用这个更进一步:
modelBuilder.Entity<MyBaseClass>().Map<DerivedOne>(m => m.Requires("MyEnum")
.HasValue((Int32)MyEnum.Value1));
现在我得到了这个 EntityCommandCompilationException:
从第 (...) 行开始映射片段时出现问题 条件成员 'MyBaseClass.MyEnum' 的条件不是 'IsNull=False' 被映射。删除 MyBaseClass.MyEnum 上的条件或将其从映射中删除。
关于如何解决这个问题的任何提示?谢谢!