我有两种情况我想要这样的东西。在我的模型中,我有一个Message
涉及一个或两个Persons
的。此外,该消息与两个 相关Addresses
,即一个 fromAddress
和一个 to Address
。
在两者的第一种情况下Persons
,我想指定 1---1..2 之间的关联Message
和Person
多重性,或者指定两个关联,一个与 1---1,另一个与 1---0.. 1. 但是,我不能(或不知道如何)将多重性设置为两个。我可以想象有可能将其设置为 1--* 并将约束设置为最大值 2(但是我不知道该怎么做)。
通过添加这两个关联,当我从侧面看时我感觉有点奇怪,Message
因为这两个关联都有一个 1 ,这表明 aPerson
应该有两个Messages
与之相关。对于两个关联,我可能想要像 0..1 这样的Message
东西,对它们有异或约束或其他东西,但我不知道这在 EF 中是否是好的做法,甚至可能。
对于第二种情况,问题非常相似,只是总有一个 fromAddress
和一个 to Address
。设置多重性 1--* 对我来说似乎不合适。在这里,我想肯定应该有两个关联,一个 from 和一个 to 关联(恰好都去Address
实体)。Message
然而,这会在有两个 1 或两个 0..1 的情况下导致相同的问题。
所以我的问题是,如何在 EDM 中正确建模?
提前致谢。
更新1:
为了澄清这个问题,我将提供一些背景信息,说明我为什么需要这样一个模型。我必须能够创建一条消息。在此消息中,我必须说明它涉及一个人还是两个人。在这些人中,我指定了名字、姓氏和其他一些非唯一属性(两个人可以有相同的名字)。我可以在实体中转储所有这些属性Message
(fname1、lname1、fname2、lname2),但这似乎是个坏主意。因此,Person
实体诞生了。但是,这可能看起来Person
可以链接到许多消息,但事实并非如此。可以有两个不同的人具有相同的属性。无法判断这些人在现实生活中是否真的是同一个人。
在地址的情况下,类似的论点成立。两个地址的拼写可能略有不同,但如果我将它们写在一封信上并邮寄,它们都会到达同一个位置(例如 sesamestreet 或 sesamestr.)。所以我没有一个Address
实体连接到多个Messages
. 同样,唯一的原因Address
是一个单独的实体,因为我有两个具有完全相同属性的 em。
从数据库设计的角度来看,这可能没有意义,从类图的角度来看,它可能更有意义。我的印象是 EF 中的 EDM 不应该像数据库设计,而更像是域模型,所以我希望我做对了。
更新 2:
我只是想到了我认为在这种情况下可能是最好的方法。因为和之间几乎没有区别Person1
,Person2
我觉得Message
和Person
1..* 之间的关联是可以接受的。许多意味着两个的事实将是较低层处理的事情。在地址的情况下,from 和 to 是完全不同的。它们都是地址,但我觉得我无法将它们列在列表中。我可以将 from 和 to address 拆分为单独的实体,并让它们继承自Address
. 然后Message
与每个子类关联。这似乎有点矫枉过正,但您可以推断,在某些时候,发件人地址可能具有与收件人地址不同的要求,因此具有不同的属性。
不过,我并不是 100% 高兴(尤其是地址部分)。这个解决方案可能好也可能不好,但我觉得它避免了核心问题。