实体框架 - 更改关系多重性

3
我在我的数据库中有一个名为[User]的表和另一个名为[Salesperson]的表,[Salesperson]定义了一个唯一的UserID,该UserID与[User].UserID具有外键映射。当我使用Entity Framework生成模型时,我得到了[User]-[Salesperson]之间的1对多关系,这意味着每个用户都有一个“Salesperson集合”,但是我想要的是0..1对1关系,其中每个用户都有一个可空的“Salesperson”引用。
我尝试通过更改关联的多重性设置来调整XML,但那只会产生构建错误。我想要实现的与在[User]中具有可空的SalespersonID并引用[Salesperson].SalespersonID没有什么不同,但由于销售人员仅存在于特定的用户中,因此感觉我会混淆[User]表结构,以便在Entity Framework中使关系指向正确的方向。
是否有任何方法可以更改关系的多重性?

你能提供更多信息吗?使用了哪个ORM?你当前的配置是什么样子的? - Nathan Feger
我不确定你在问什么?我正在使用Entity Framework与MySQL数据库。你所指的“config”是指什么? - Nathan Taylor
哦,抱歉,我以为你说的实体框架是指对象关系映射器的通用术语,而不是特定的产品。 - Nathan Feger
更改数据库模式是一个选项吗? - Craig Stuntz
是的,Craig,更改模式不是不可能的。你有什么建议? - Nathan Taylor
1个回答

2
Salesperson 的主键自身作为 User 的外键。这样 EF 的 GUI 设计器就能正确处理基数,因为主键是唯一的。

你可以称其为SalespersonId,但由于FK Salesperson.SalespersonId == User.UserId,无论它被称为什么,GUI设计师都可以推断出正确的基数,而数据库将强制执行它。 - Craig Stuntz
我还没有测试过这个,但一旦我测试过了,如果它有效的话,我会标记答案!非常感谢。 :) - Nathan Taylor
在你重新生成之前是否存在现有的关系?在新表上试一下。这对我们来说是有效的。另外,如果User.UserId不是PK,请尝试使用PK。EF的GUI设计器可能可以看到PK但无法看到唯一约束。 - Craig Stuntz
我注意到 EF 在存在唯一性约束和不存在唯一性约束时生成的代码没有任何区别。这似乎很奇怪... - Nathan Taylor
理论:关系在客户端模式中,仅在存储模式发生“显著”更改时才会进行更新(即使是以小块的方式)。这样做的想法是为了保留您所做的更改,其中可能包括关系的更改。存储模式始终从头开始重新生成。此处存储模式的更改可能不会被GUI检测为足够“显著”,以致于再次对客户端模式进行变异,以尝试保留您可能进行的更改。但是,当您重新生成时,它会捕捉到存储模式中的约束。 - Craig Stuntz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接