2012-10-12 28 views
10

我想在复杂类型实体框架中定义[Required]属性。例如,我有一个Customer实体,可选Address。地址实体具有必需的PostCode属性。我不想将我的复杂类型作为单独的实体存储(我实际上并未使用Address,这只是对问题的简单说明)。我不能离开Customer.Address空,因为这给了错误:关于可选实体框架复杂类型的必需属性

Null value for non-nullable member. Member: 'Address'.

如果我提供一个空地址实体,验证上,因为所需属性的邮编场失败。

有什么办法可以达到这个目的吗?我正在使用EF5/NET4.5。

回答

8

复杂类型是不可能的。如果您希望它可以为空,您将需要创建一个Address实体。

EF将如何处理复杂类型是将属性映射到同一个表 - 这听起来就像您打算的那样。

正因为如此 - 你对你的榜样模式是这样的:

enter image description here

随着Address_PostCode非空的列,因为它不是在数据库中有效的有没有为EF的方式创建行,没有你的对象有一个地址和一个邮政编码。

+0

真的希望在没有其他实体的情况下做到这一点。猜猜我将不得不做验证有点不同。无论如何感谢您确认我的怀疑! – Richard

+0

这是EF的一个非常糟糕的功能。通过在Address对象上使用反射,EF可以轻松计算创建表时要创建的列。它不需要有来自实体的地址实例来解决这个问题。并且在实体创建/更新时,如果ComplexType属性为null,那么将数据库中的这些列设置为null会非常困难?这应该是下一版EF IMO的一个简单功能。 – Ibraheem