【问题标题】:Required Properties on optional Entity Framework Complex Types可选实体框架复杂类型的必需属性
【发布时间】:2012-10-12 09:36:05
【问题描述】:

我想在实体框架中的复杂类型上定义[Required] 属性。例如,我有一个带有可选AddressCustomer 实体。 Address 实体具有必需的 PostCode 属性。

[ComplexType]
public class Address {
    public string Address1 { get; set; }
    [Required]
    public string PostCode { get; set; }
}

public class Customer {
    public int CustomerId {get;set;}
    public Address Address {get;set;}
}

我不想将我的 Complex 类型存储为单独的实体(我实际上并没有使用 Address,这只是问题的一个简单说明)。我不能让 Customer.Address 为空,因为这会给出错误:

不可空成员的空值。成员:“地址”。

如果我提供一个空的地址实体,则 PostCode 字段上的验证会因为必需属性而失败。

有什么方法可以实现吗?我正在使用 EF5/NET4.5。

【问题讨论】:

    标签: entity-framework entity-framework-5


    【解决方案1】:

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

    EF 对复杂类型的作用是将属性映射到同一个表 - 这听起来像是您的意图。

    因此 - 您的示例架构将如下所示:

    对于 Address_PostCode 的不可为空的列,由于它在数据库中无效,因此 EF 无法在您的对象没有地址和邮政编码的情况下创建行。

    【讨论】:

    • 真的希望在没有其他实体的情况下做到这一点。我想我必须做一些不同的验证。无论如何,感谢您确认我的怀疑!
    • 这是 EF 的一个非常糟糕的功能。使用 Address 对象上的反射,EF 可以轻松计算出在创建表时要创建哪些列。它不需要来自实体的 Address 实例来解决这个问题。在实体创建/更新时,如果 ComplexType 属性为空,那么将数据库中的这些列设置为空有什么难的?这应该是 EF IMO 下一版本的一个简单功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多