我正在尝试将两个具体实体类型和一个抽象基类型映射到同一个数据库表。
该表包含一个不接受null的位列。列具有默认值:((0))。
两种具体实体类型中只有一种(即具体类型1)需要使用列的值(对于另一种(即具体类型2),它总是假的。)
我尝试将映射到该列的属性添加到需要它的实体类型 和
当我调用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确实有效,但我更喜欢更优雅的解决方法。
答案 0 :(得分:1)
如果您的解决方法不起作用(我有点惊讶,但我现在要对它进行测试),那么唯一的其他解决方法是将您的继承从TPH更改为TPT或TPC。问题显然是TPH要求派生类型中的所有列都可以为空。
其他解决方法是让您的父实体的列成员和派生实体使用自定义构造函数,它始终将其设置为false。
最后一种解决方法是让您的列可以为空,并在第一个实体的业务逻辑中强制执行验证。