【问题标题】:Entity framework saving child objects实体框架保存子对象
【发布时间】:2012-08-14 10:39:17
【问题描述】:

我对实体框架很陌生,并且在调整时遇到了一些麻烦。像所有事情一样,一开始我看到它使我的 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;

(包括想象属性设置)

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

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

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

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

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

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

【问题讨论】:

    标签: frameworks entity


    【解决方案1】:

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

    Context.Spouses.Add(spouse);
    

    在将其附加到 Person 之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多