谁能告诉我如何解决问题:
我想在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,
由于对象的当前状态,操作无效。
感谢您的帮助
答案 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表达式可以打开表并从中读取。