从Entity Framework 0..1到1创建数据库是NOT NULL

时间:2011-11-18 10:35:12

标签: sql-server entity-framework-4.1

我刚开始使用Entity Framework并开始首先设计模型。所以在我的模型中有一个可以拥有PrivateTelephone的人,所以我创建了一个0..1到1的关联。如下图所示。

enter image description here

到目前为止一切顺利。但是当我生成数据库时,[PrivateTelephone]设置为NOT NULL。为什么这不能只是NULL

1 个答案:

答案 0 :(得分:1)

因为你的关系是按相反的顺序定义的。您应该Person上的1和Telecom上的0..1指定Person是可以拥有一部或零电话的主体。在您的映射中,您说Telecom是主体,可以有一个或零个人但人必须有Telecom。由于您的映射不正确,它也会导致反向问题。你与Telecom有六个一对一的关系,但如果按照你的要求反转它们,你会说所有六个关系(Telecom中的所有六个FK)都不是NULL =每个记录都有参加所有六个关系。

一对一关系非常特殊,应该很少使用。您应该使用PersonTelecom之间的一对多关系,Telecom中的新列指定类型。

使用一对一关系时,必须在依赖表中使用唯一索引配置FK。 EF不支持唯一索引,因此当您在模型中首先建模一对一关系时,它仍然是数据库中的一对多关系,如果数据库被另一个应用程序使用,它可能会破坏您的应用程序。

还要避免不必要的继承。您需要Person作为单独的实体吗? =是否有任何只有人而非员工的实例?是否有更多衍生类型来自人?如果不是你不需要人,如果是,它仍然不意味着基础人是个好主意。员工也是如此。继承在EF中有自己的规则,当首先使用模型时,默认情况下会创建TPT继承=最差的,因为它会导致非常复杂和缓慢的数据库查询。