更新时EF6 InvalidOperationException,但在手动更改DB后工作

时间:2015-02-19 12:41:27

标签: c# entity-framework entity-framework-6

我正在尝试更新实体的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;
        }
    }
}      

0 个答案:

没有答案