0

我对实体框架很陌生,并且在调整时遇到了一些麻烦。就像所有事情一样,一开始我看到它让我的 CRUD 操作变得多么简单,并认为它很棒。然而,随着我的对象模型变得稍微复杂一些,我开始遇到越来越多的问题。

尽管到目前为止,我已经设法通过在这里搜索找到了几乎所有问题的答案,但我目前的问题难倒了我。

我有两个实体,它们通过 1 到 1/0 的关系链接。我还不能发布图片,所以请在下面删除我的狡猾绘图:

Person (id, name, address, dob, etc. etc.)
Spouse (id, name, address, dob, etc. etc.)

虽然实际情况更复杂,但我认为这不是我的问题的一部分。

现在,看到这是一个 1 对 0/1 的关系,一个人有 1 个配偶,或者他们有 0 个配偶。如果我通过以下方式构造我的对象:

Person person = new Person();
person.Spouse = new Spouse(); 
person.Spouse = spouse;

(包括想象属性设置)

然后保存它。这是一种享受。然后我可以再次加载它,编辑它等等。生活很美好。

我遇到问题的地方是我保存一个人(没有配偶),然后在稍后阶段加载这个人进行编辑并尝试附加一个配偶。当我到达我的 container.Attach(person); 调用时,它会引发以下异常:“具有临时 EntityKey 值的对象不能附加到对象上下文。”

现在,我非常有信心这是由于我添加配偶的方式,即:

Person person = LoadPerson(id);
Spouse spouse = new Spouse();
person.Spouse1 = spouse;

我看到的问题是我现在试图关联一个以前没有关联的子实体。我对错误消息进行了很多搜索,但通常它似乎与对象上下文有关。我也找到了解决方法(根据我发现的结果)。如果我使用一对多的关系并做 Person.Spouses.Add(spouse) 它工作正常。但是我很犹豫,因为这种关系不合逻辑(无论如何在这个国家......)。我确定这是一个简单的答案,我显然在我所看到的结果中忽略了它(我非常怀疑我是第一个尝试这样做的人......)但我尝试过的任何事情似乎都不起作用。

任何帮助将不胜感激......

4

1 回答 1

0

您可能需要先将配偶添加到上下文中

Context.Spouses.Add(spouse);

在将其附加到 Person 之前。

于 2012-11-07T00:53:02.870 回答