Sco*_*ord 6 c# linq performance sqlmetal linq-to-sql
我遇到了一个试图更新外键字段的问题:
record.ForeignId = newId;
它由于SQLMetal代码抛出而导致"由于对象的当前状态而导致操作无效" System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException().
我不是第一个遇到这个问题的人:
LinqToSQL错误:由于对象的当前状态,操作无效,并且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则查询)?
您可以新建一个父级实例(具有正确的 ID),将Attach其作为现有记录状态添加到数据上下文,然后分配子对象的 Parent 属性。
这是一些代码:
int theId = 5;
Parent p = new Parent() { Id = theId};
dc.Parents.Attach(p);
child.Parent = p;