是否可以将一对一的几个不同的表与可选的FK相关联?

时间:2016-09-01 01:21:43

标签: entity-framework ef-code-first

我正在使用Code First Entity Framework。

我有一个 Bar 表/域类。

我还有一个地址表/域类。这是因为一个Bar可以有一个Address,反之亦然。

我在这两个实体之间建立了一对一关系,其中Bar是父级。我现在正在为我的应用程序添加 Brewer 实体,显然还需要存储一个地址。

我想使用我上面已经拥有的地址表/实体,现在也代表Brewer的地址。这意味着,当创建新的brewer时,可以在创建条形图时创建新地址。现在,我的地址实际上使用BarId作为其主要的外键。显然,当我想添加Brewer记录时,Bar不会成为交易的一部分,因此必须进行更改。

我正在寻找一种方法来设置数据库以接受新地址,只要它与 Brewer或Bar相关联,但绝对不是两者都在一旦。这个问题,根据定义,在Address中使用的BarId和BrewerID作为外键必须是可选的。但是,为了设置一对一,您必须同时使用[Key] [ForeignKey] DataAnnotations或.HasRequired()。WithRequiredParent阻止我这样做。有没有其他方法可以做到这一点?我收到此错误:

Bar_Address_Target: : Multiplicity is not valid in Role 'Bar_Address_Target' in relationship 'Bar_Address'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'.
Brewer_Address_Target: : Multiplicity is not valid in Role 'Brewer_Address_Target' in relationship 'Brewer_Address'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'.

但是,这个问题不是直接关于这个错误:我确实理解错误。 SO上最接近最有帮助的答案是this one。但是,它没有具体解决这个问题,我试图进行多个一对一但需要将外键作为可选项。如果没有它们是可选的,应用程序将要求我为每个添加的Brewer添加一个Bar,反之亦然,这显然没有任何意义。

0 个答案:

没有答案