create table Test_Table
(
ID int primary key identity,
C1 nvarchar(100) NULL
)
Test_Table
已映射到Test_1
实体,并且是Test_2
实体的父级
是否可以实现TPH继承,其中取决于鉴别器列C1
是否具有空值,DB记录将实现为类型为Test_1
的实体或实体为输入Test_2
?
为此,Test_1
的歧视性列应设置为条件[C1] Is Not Null
,而Test_2
的歧视列应设置为条件[C1] is null
。但问题是条件Is Not Null
要求我们也将C1
列映射到属性,而Is Null
不允许C1
也映射到属性。
那么是否可以仅使用条件映射来实现这样的条件?
谢谢
答案 0 :(得分:0)
如标题所示,只要父类与null值相关联,并且子类具有非null(必需)值,就可以这样做。
使用代码优先的流畅映射:
public class Test_1
{
public int ID { get; private set; }
}
public class Test_2
{
public string C1 { get; set; }
}
protected override void OnModelCreating(DbModelBuilder dbm)
{
dbm.Entity<Test_1>()
.Map<Test_2>(m => m.Requires(t => t.C1).HasValue());
}
但是,在父级需要值的情况下,子级则不可能。这至少部分是因为它破坏了继承中的“is-a”关系:如果Test_2 具有相互矛盾的定义,那么它如何 - 具体来说,它排除了一个值父母要求的字段?