为什么在使用 TPH 继承时忽略默认值


CREATE TABLE Lodging
(
     LodgingID int PRIMARY KEY IDENTITY,
     LodgingName nvarchar(100),
     Resort bit NOT NULL,
     ResortChainOwner nvarchar(100) NOT NULL,
         ...
)

Lodging数据库表映射到Lodging实体。然后,我实现了 TPH 继承:

• 以Lodging实体为基础

• 我创建了一个新的实体Resort,它派生自Lodging

• 我将度假村特定的属性ResortChainOwner移动到Resort实体类型,并将(在 SSDL 中(ResortChainOwner's默认值设置为"notApplicable"

• 住宿表的Resort列是歧视性列。如果Resort列包含 0 ,则记录将具体化为Lodging实体,如果列包含 1 ,则记录将具体化为实体Resort

在下面的代码中调用SaveChanges时,EF 应为ResortChainOwner字段提供(插入命令(默认值,但它提供Null

        var lodging = new Lodging();
        ...
        context.Lodgings.AddObject(lodging);
        context.SaveChanges();

那么如何在插入上强制 EF 为度假村链所有者列提供默认值?

谢谢

您已为 Resort 类定义了默认值,但已实例化了超类"住宿"。因此,请改为使用:

var lodging = new Resort();

基类"住宿"甚至不再具有该属性,如果我了解您的话。

尝试将Lodging实体设置为抽象并创建派生自Lodging的第二个实体。我有一种感觉 TPH 仅适用于实际继承自包含鉴别器字段的类的类。

最新更新