【发布时间】:2013-05-05 02:02:22
【问题描述】:
对于实体框架中只有可以为空的属性的复杂类型,为什么像下面这样需要实例化复杂类型:
[ComplexType]
public class Address {
public string Address1 { get; set; }
}
public class Customer {
[Key]
public int CustomerId {get;set;}
public Address Address {get;set;}
}
更具体地说,如果您不声明和地址类型,您将获得“不可为空成员的空值。成员:'地址'。”根据this question。
只要复杂类型中的所有属性都可以为空,为什么实体框架需要Address的实例?既然 Address1 可以为空,为什么它不能只假设并在行中创建表(和列 Address_Address1)和空值,就好像我创建了一个带有空 Address1 的 Address 实例?
或者是否有我可以应用的属性/流畅设置来实现这一点?
【问题讨论】:
-
可能是您没有使用空运算符为地址分配内存。
-
这是 EF 的一个非常糟糕的功能。使用 Address 对象上的反射,EF 可以轻松计算出在创建表时要创建哪些列。它不需要来自实体的 Address 实例来解决这个问题。在实体创建/更新时,如果 ComplexType 属性为空,那么将数据库中的这些列设置为空有什么难的?这应该是 EF IMO 下一版本的一个简单功能。
标签: c# entity-framework