可选实体框架复杂类型的必需属性

Ric*_*ard 10 entity-framework entity-framework-5

我想[Required]在Entity Framework中的复杂类型上定义属性.例如,我有一个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;}
}
Run Code Online (Sandbox Code Playgroud)

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

非可空成员的空值.成员:'地址'.

如果我提供一个空的Address实体,由于Required属性,验证在PostCode字段上失败.

有没有办法实现这个目标?我正在使用EF5/NET4.5.

Mar*_*eta 8

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

EF对复杂类型的作用是将属性映射到同一个表 - 这听起来像你想要的那样.

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

在此输入图像描述

使用Address_PostCode的非可空列,因为它在数据库中无效,所以EF没有办法创建行,而没有对象具有地址和邮政编码.