如何正确更新记录?

时间:2016-04-21 23:12:34

标签: c# winforms linq

谁能告诉我如何解决问题:

我想在db:

中更新我的记录
internal static void ReleaseMachine(int idMachine)
        {
            Machine machine = GetByID(idMachine);
            if (machine != null)
                machine.idWorker = null;
        }

internal static Machine GetByID(int idMachine)
    {
        return (from m in Database.Current.Machines where m.idMachine == idMachine select m).FirstOrDefault();
    }

但是当我尝试时,该程序会引发异常:

  

System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException,

     

由于对象的当前状态,操作无效。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

我猜idWorker是外键,并且您将外键设置为null,这是不允许的,因为外键将不再与引用表中的记录匹配。这将在引用的表中创建一个孤立的记录。在删除外键之前,必须先从数据库中删除Worker。

如果您直接在数据库的SQL查询中尝试相同的操作,则不允许您将idWorker设置为null。如果它允许您直接在数据库中将idWorker设置为null,则可能没有正确设置实体(在实体设置中可以为空的外键)。

答案 1 :(得分:0)

同意Hakunamatata,这是一个同花顺/关闭问题,解决

dbcontext.Entry(machine).State = EntityState.Modified;
dbcontext.SaveChanges();

解释:将它与保持文件打开进行比较。你已经在你的Machine表中放了一个NULL ..你打开了Framework的Table对象来写...但是Linq从同一个表中加载了它的记录。它不知道你已经完成了写作,所以它抛出一个异常。您需要做的就是将更改保存到数据库中。之后,Linq表达式可以打开表并从中读取。