开发者

Problem with Adding multiple child objects to an existing entity in EF

开发者 https://www.devze.com 2023-03-11 22:40 出处:网络
I need to add multiple child objects to an existing parent Object. I am instantiating my parent object and sets it Key/Id in my UI processing layer(to which my child objects will be added).

I need to add multiple child objects to an existing parent Object. I am instantiating my parent object and sets it Key/Id in my UI processing layer(to which my child objects will be added).

    Parent parenttoModify = new Parent();
    parenttoModify.Parent_Id = 5; //this comes from some Index of a dropdown or a key column of a grid, i Have put a dummy value here for example
    parenttoModify.Children.Add(child);
    parenttoModify.Children.Add(child2);
    DataAccess.ModifyParent(parenttoModify); 

In my data access layer I have a method like :

public static bool ModifyParent(Parent parent)
        {
            int recordsAffected=0;
            using (TestEntities testContext = new TestEntities())
            {

                testContext.Parents.Attach(parent);
                var parentEntry = testContext.ObjectStateManager.GetObjectStateEntry(parent);
 开发者_Python百科               parentEntry.ChangeState(System.Data.EntityState.Modified);
                recordsAffected =  testContext.SaveChanges();
            }
            return recordsAffected > 0 ? true : false;

        }

I get an error when testContext.Parent.Attach(parent) is called. It says:

Object with same key already exist.

I am not sure why is this happening since i am not adding a parent object, I am just attaching it and adding child objects within it.

Any idea where I am going wrong?


Where do you add childs? I guess you are not showing all code. When you call Attach or AddObject EF always attaches or adds all entities from object graph which are not known (tracked) to context at the moment. The exception says that some entity - probably parent - is already tracked by the context. So you have either:

  • Used shared context (you are creating a new instance in ModifyParent so it should not be a case)
  • Load parent from the context first in ModifyParent
  • Called Attach or AddObject on any child before attaching parent.

All these operations lead to the exception you are receiving.

0

精彩评论

暂无评论...
验证码 换一张
取 消