0
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也映射到属性。

那么是否可以仅使用条件映射来实现这样的条件?

谢谢

4

1 回答 1

0

如标题所示,只要父类与空值相关联,而子类与非空(必需)值相关联,这是可能的。

使用代码优先的流畅映射:

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 有一个矛盾的定义,它怎么能成为一个 Test_1 - 具体来说,它排除了父级所需的字段中的值?

于 2017-01-04T20:07:38.297 回答