Вы пытаетесь создать .Add (сущность) с той же сущностью?Тогда вы получите эту ошибку.Если вы хотите что-то изменить в этой сущности, просто внесите изменения, такие как "entity.rowname = value", а затем сохраните, не пытаясь сделать .Add (entity), и все должно работать нормально.
Как обычносделать это примерно так.
Создать новую строку в базе данных:
Entity entity = new Entity();
entity.value = value;
db.Entity.AddObject(entity);
db.SaveChanges();
Получить и отредактировать строку:
var entity = db.Entity.SingleOrDefault(e => e.value == value);
entity.value = newValue;
db.SaveChanges();
Вы также можете сделать что-то вроде этогобез проблем
Entity entity = new Entity(); //creating a new Entity
entity.value = 1; //Setting a value on the new Entity
db.Entity.AddObject(entity); //Adding the Entity to the context
db.SaveChanges(); //Saving the record to the database
entity = db.Entity.SingleOrDefault(e => e.value == 2); //retrieving another, already added record
entity.value = 5; //Changing the value on the retrieved record
db.SaveChanges(); //Saving the change to the database
entity = new Entity(); //creating yet another new Entity
entity.value = 8; //setting the value on the second new Entity
db.Entity.AddObject(entity); //adding the Entity to the context
db.SaveChanges(); //Saving the second new Entity to the database
Вы можете НЕ сделать так
var entity = db.Entity.SingleOrDefault(e => e.value == value);
entity.value = newValue;
db.Entity.AddObject(entity); //WRONG!
db.SaveChanges();
Или это
Entity entity = new Entity();
entity.value = value;
db.Entity.AddObject(entity);
db.SaveChanges();
entity.value = newValue;
db.Entity.AddObject(entity); //WRONG!
db.SaveChanges();
В этом случае он попытаетсявставьте уже отслеживаемый объект в качестве новой строки с тем же ключом, и он будет жаловаться, что уже существует предыдущая строка с тем же ключом, выдавая ошибку «ограничение уникального ключа».