将对象添加到导航属性集合会创建新实体

时间:2010-12-07 14:51:02

标签: entity-framework

我正在使用Entity Framework 4.

我正在尝试将新实体与现有实体相关联。系统最终会创建一个新的子实体,而实际上我只是想将子对象的引用添加到父对象。

两个实体之间存在多对多的关系,所以我不能简单地设置父实体的FK属性。我尝试过parent.ChildCollection.Add(child),它只是在数据库中创建一个新的子对象。这就是我要避免的。

我必须做一些明显不对的事。

感谢

更新的代码示例

我的自我跟踪实体的代码示例,我必须做客户端 现在我有这样的东西让服务器上的所有孩子然后循环找到我想要的那个,然后将它添加到对象集合

          List<Service.Child> childs = _client.GetChildren();

我必须遍历该集合以找到要添加到parent.childs集合的正确集合,即。

            List<Service.Child> childList = new List<Service.Child>();
            foreach (Service.Child child in childList) {
                if (child.ChildId == childId)
                    childList.Add(child);
            }
            contact.Childs = childList;

1 个答案:

答案 0 :(得分:1)

如果实体最初来自数据库并且已填充其自己的EntityKey属性,则使用添加将其链接到另一个实体将其EntityState更改为 Added 。即使它是一个预先存在的实体,SaveChanges也会为该实体创建一个insert命令。您应该考虑使用Attach代替:

parent.ChildCollection.Attach(child);

使用Attach方法,您可以定义已经实体之间的关系 存在于ObjectContext中但尚未自动连接。