The property 'Id' is part of the object's key information and cannot be modified

Amito picture Amito · Jul 6, 2010 · Viewed 120.1k times · Source

i'm using Entity Framework 4.0 and having a silly problem that i can't figure out.

I have two tables:

  1. Contact: Id (primary key), Value, ContactTypeId (foreign key to ContactType)
  2. ContactType: Id (Primary key), Type (Home, Cell, Work, etc.)

Entity Framework created the following two entities:

  1. Contact: Id, Value, ContactType (Navigation Property)
  2. ContactType: Id, Type, Contact (Navigation Property)

I'm using the following code to get the contact and update the contact type for that particular contact:

Contact contact = dbContext.Contacts.Single(c => c.Id == 12345);
contact.ContactType.Id = 3;

Throws the following exception:

The property 'Id' is part of the object's key information and cannot be modified.

It looks so simple! I don't get it!

Answer

AL-Tamimi picture AL-Tamimi · Sep 13, 2012

This problem happens because you are referencing the same object more than once. This is not a limitation of EF, but rather a safety feature to ensure you are not inserting the same object with two different IDs. So to achieve what you are trying to do, is simply create a new object and add the newly created object to the database.

** This issue often happens inside loops. If you are using a while or foreach loop, make sure to have the New Created Object INSIDE the loop body.

try this:

Contact contact = dbContext.Contacts.Single(c => c.contactTypeId == 1234);
contact.contactTypeId = 4;
dbContext.AddObject(contact);
dbContext.SaveChanges();