我在尝试更新外键字段时遇到了问题:
record.ForeignId = newId;
由于 SQLMetal 代码抛出 System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException()
,导致出现“由于对象的当前状态而无法执行操作”的错误。
我并不是第一个遇到这个问题的人:
LinqToSQL Error : Operation is not valid due to the current state of the object 和 http://social.msdn.microsoft.com/forums/en-US/linqtosql/thread/f9c4a01a-195a-4f2b-a1cb-e2fa06e28b25/ 等讨论了这个问题。
他们的解决方法如下:
record.Foreign = Database.Foreigns.Single(c => c.Id == newId);
当然,这会导致在外键上进行数据库查找,只是为了获取一个我已经知道ID的对象!那么,我如何在没有无意义查询的情况下完成此更新(如果我有许多这些FK,则可能涉及多个查询)?