保存子对象的实体框架

时间:2012-08-14 10:39:18

标签: frameworks entity

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

虽然我已经设法通过搜索到目前为止找到几乎所有问题的答案,但我现在的问题让我很难过。

我有两个由1到1/0关系链接的实体。我无法发布图片,所以请在下面涂上我狡猾的图画:

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

虽然实际情况比较复杂,但我认为这不是我的问题所在。

现在,看到这是一个1到0/1的关系,一个人有一个配偶,或者他们有0.如果我构建我的对象:

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

(想象包括属性设置)

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

我遇到问题的地方是我拯救一个人(没有配偶),然后在稍后阶段加载该人进行编辑并尝试附上配偶。当我到达我的容器.Attach(人); call,它抛出以下异常:“具有临时EntityKey值的对象不能附加到对象上下文。”

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

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

我看到的问题是我现在试图关联以前没有关联的子实体。我已经对错误消息进行了大量搜索,但通常它似乎与对象上下文有关。我也找到了一个解决方案(从我发现的结果)。如果我使用1对多的关系并且做Person.Spouses.Add(配偶)它可以正常工作。然而,由于这种关系不合逻辑(在这个国家无论如何......),我都犹豫不决。我确定它是一个简单的答案,我在我看到的结果中显然已经忽略了(我非常怀疑我是第一个尝试这样做的人......)但我尝试过的任何东西似乎都没有用。

任何帮助都将受到高度赞赏......

1 个答案:

答案 0 :(得分:0)

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

Context.Spouses.Add(spouse);

在将其附加到人员之前。