I am trying to save an object of type ChangeRequest
, which has multiple navigation properties. For these properties, I have set their EntityState to Unchanged to prevent Entity Framework from creating duplicates in my database.
For most of these properties, their states are changed successfully and they are not persisted to the database.
When I do the following: db.Entry(changeRequest_Database_Server.Database_Server.Server).State = EntityState.Unchanged;
for Server object
and then again:
db.Entry(changeRequest_Server_Application.Server_Application.Server).State = EntityState.Unchanged;
for the same Server object, I get the exception:
Saving or accepting changes failed because more than one entity of type 'ChangeControl.Business.Server' have the same primary key value. Ensure that explicitly set primary key values are unique...
Here is my code:
db.ChangeRequests.Add(changeRequest);
db.Entry(changeRequest.BusinessUnit).State = EntityState.Unchanged;
foreach (var changeRequest_ChangeType in changeRequest.ChangeRequest_ChangeType)
{
db.Entry(changeRequest_ChangeType.ChangeType).State = EntityState.Unchanged;
}
foreach (var changeRequest_Attachment in changeRequest.ChangeRequest_Attachment)
{
db.Entry(changeRequest_Attachment.Attachment).State = EntityState.Unchanged;
}
foreach (var changeRequest_Attachment in changeRequest.ChangeRequest_Attachment)
{
db.Entry(changeRequest_Attachment.Attachment).State = EntityState.Unchanged;
}
foreach (var changeRequest_Database_Server in changeRequest.ChangeRequest_Database_Server)
{
db.Entry(changeRequest_Database_Server.Database_Server).State = EntityState.Unchanged;
db.Entry(changeRequest_Database_Server.Database_Server.Server).State = EntityState.Unchanged;
db.Entry(changeRequest_Database_Server.Database_Server.Database).State = EntityState.Unchanged;
}
foreach (var changeRequest_Requirement in changeRequest.ChangeRequest_Requirement)
{
db.Entry(changeRequest_Requirement.Requirement).State = EntityState.Unchanged;
}
foreach (var changeRequest_Server_Application in changeRequest.ChangeRequest_Server_Application)
{
db.Entry(changeRequest_Server_Application.Server_Application).State = EntityState.Unchanged;
db.Entry(changeRequest_Server_Application.Server_Application.Server).State = EntityState.Unchanged;
db.Entry(changeRequest_Server_Application.Server_Application.Application).State = EntityState.Unchanged;
}
db.SaveChanges();
I have tried this and this to no avail.
How can I check for untracked objects and make sure that duplicates are not being inserted in my database?