我正在尝试更新实体的FK。我是这样做的:
myEntity.FK_ID= Guid.Parse("aff4b5d9-e197-4f0d-85ff-b04464d9e4f0"); //Entity with this Guid exists inside the DB
myEntity.ForeignKeyProperty= null;
然后我尝试像这样更新实体(新上下文):
using (MyContext db = new MyContext ())
{
//db.Benutzer.Attach(entity); // <-- Same Exception
db.Entry(entity).State = EntityState.Modified;
}
这会导致InvalidOperationException:
A referential integrity constraint violation occurred: The property value(s) of 'MyTable.MyTable_ID' on one end of a relationship do not match the property value(s) of 'MyEntity.FK_ID' on the other end.
我真的不知道为什么。然后我尝试了以下内容: 我将FK_ID的值更改为数据库中的目标值。这很有效(好吧,EF可能会选择一些东西......) 但后来我把价值改为其他东西而且它仍然有效。
手动数据库更改后,它现在适用于这个实体EVERYTIME。如果我尝试更新另一个实体,我会得到相同的异常。关于为什么会这样的想法?!
此致 烫发
编辑: 这是一个更完整的代码:
//In MVC-Controller
Benutzer dbBenutzer = Database.GetBenutzerByID(model.ID_Benutzer);
// ... Do some other changes to the entity
dbBenutzer.ChangeMitarbeiter = null;
dbBenutzer.MitarbeiterChange_ID = CurrentUser.Mitarbeiter_ID;
//...SaveChanges via
Database.Update<Benutzer>(dbBenutzer);
// In Repository
public static int Update<E>(E entity) where E : class
{
using (Context db = new MMVContext())
{
try
{
db.Entry(entity).State = EntityState.Modified; //EXCEPTION
return SaveRepositoryChanges<E>(db);
}
catch (Exception e)
{
Logging.Error(e.ToExtString());
return -1;
}
}
}