[ACCEPTED]- Insert new object with existing object-entity-framework-4
If you don't want insert objectB
you must inform 5 EF about it. When you call context.objectAs.AddObject(obj)
for objectA
you are 4 saying: I want to insert objectA and all its dependencies. But obviously you don't want to 3 save dependecies so you must either:
- Load
objectB
from DB before adding it toobjectA
. In such case EF will know thatobjectB
is existing object and it will not insert it again. - Attach
objectB
to context before adding it toobjectA
.ObjectB
will be handled as existing but unchanged. - Set the state of
objectB
after insertingobjectA
. You can do that by calling:context.ObjectStateManager.ChangeObjectState(objectB, EntityState.Unchanged)
Example 2 of the fist suggestion:
var id = objectB.Id;
objectA.myObjectB = context.ObjectBs.SingleOrDefault(o => o.Id == id);
Example of the second 1 suggestion:
context.ObjectBs.Attach(objectB);
objectA.myObjectB = objectB;
Example of the third suggestion:
objectA.myObjectB = objectB;
context.ObjectAs.AddObject(objectA);
context.ObjectStateManager.ChangeObjectState(objectB, EntityState.Unchanged);
I suppose that problem in following row:
objectA.myObjectB = (objectB)cmbBObjects.selectedItem;
Because 7 of result (objectB)cmbBObjects.selectedItem
detached from datacontext entity 6 framework create new instance. Instead this 5 you can:
1.Assign objectB id to objectA
var b = (objectB)cmbBObjects.selectedItem;
objectA.myObjectBId = b.Id;
2.Or 4 load objectB from dataContext and than assign 3 to objectA:
var b = (objectB)cmbBObjects.selectedItem;
var dcB = context.ObjectBs.Single(x=> x.Id == b.Id);
objectA.myObjectB = dcB;
Just try my suggestions and come 2 back with results, because i don't know 1 exactly.
Hope this help.
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.