我刚开始使用Entity Framework并开始首先设计模型。所以在我的模型中有一个可以拥有PrivateTelephone的人,所以我创建了一个0..1到1的关联。如下图所示。
到目前为止一切顺利。但是当我生成数据库时,[PrivateTelephone]设置为NOT NULL
。为什么这不能只是NULL
?
答案 0 :(得分:1)
因为你的关系是按相反的顺序定义的。您应该Person
上的1和Telecom
上的0..1指定Person
是可以拥有一部或零电话的主体。在您的映射中,您说Telecom
是主体,可以有一个或零个人但人必须有Telecom
。由于您的映射不正确,它也会导致反向问题。你与Telecom
有六个一对一的关系,但如果按照你的要求反转它们,你会说所有六个关系(Telecom
中的所有六个FK)都不是NULL =每个记录都有参加所有六个关系。
一对一关系非常特殊,应该很少使用。您应该使用Person
到Telecom
之间的一对多关系,Telecom
中的新列指定类型。
使用一对一关系时,必须在依赖表中使用唯一索引配置FK。 EF不支持唯一索引,因此当您在模型中首先建模一对一关系时,它仍然是数据库中的一对多关系,如果数据库被另一个应用程序使用,它可能会破坏您的应用程序。
还要避免不必要的继承。您需要Person
作为单独的实体吗? =是否有任何只有人而非员工的实例?是否有更多衍生类型来自人?如果不是你不需要人,如果是,它仍然不意味着基础人是个好主意。员工也是如此。继承在EF中有自己的规则,当首先使用模型时,默认情况下会创建TPT继承=最差的,因为它会导致非常复杂和缓慢的数据库查询。