10

我想[Required]在实体框架中定义复杂类型的属性。例如,我有一个Customer带有可选的实体Address。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 字段上的验证会因为Required 属性而失败。

有什么办法可以做到这一点?我正在使用 EF5/NET4.5。

4

1 回答 1

8

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

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

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

在此处输入图像描述

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

于 2012-10-12T11:18:09.013 回答