1

我正在尝试将两个具体实体类型和一个抽象基类型映射到同一个数据库表。

该表包含一个不接受空值的位列。列有一个默认值:((0))。

只有两种具体实体类型(即具体类型 1)中的一种需要使用列的值(对于另一种(即具体类型 2),它始终为 false)。

我尝试将映射到该列的属性仅添加到需要它的实体类型和

当我调用 SaveChanges 时,我得到一个 UpdateException,在其最里面的异常中显示以下消息:
“列不能包含空值。[列名 = MY_BIT_COLUMN,表名 = MY_TABLE]”

我已经编辑了 EDMX 的 SSDL 部分并进行了更改:

<Property Name="MY_BIT_COLUMN" Type="bit" Nullable="false" />

到:

<Property Name="MY_BIT_COLUMN" Type="bit" Nullable="false" DefaultValue="false" />

(如果没有此更改映射失败 - 将不会运行)

有没有办法在不将映射到该列的属性添加到第二个具体实体类型或将其移动到基本类型的情况下解决这个问题?

将受保护的属性添加到具体类型 2 确实有效,但我更喜欢更优雅的解决方法。

4

1 回答 1

1

如果您的解决方法不起作用(我有点惊讶,但我现在测试它为时已晚),那么唯一的其他解决方法是将您的继承从 TPH 更改为 TPT 或 TPC。问题显然是 TPH 要求派生类型中的所有列都可以为空。

其他解决方法是让您的列成员成为父实体并在派生实体中使用将始终将其设置为 false 的自定义构造函数。

最后一种解决方法是使您的列可以为空,并在您的业务逻辑中对第一个实体强制执行验证。

于 2011-05-03T22:38:31.730 回答