gpt4 book ai didi

c# - 如何在 LINQ to SQL/SQLMetal 中有效地更新外键?

转载 作者:太空狗 更新时间:2023-10-29 21:47:27 26 4
gpt4 key购买 nike

我在尝试更新外键字段时遇到问题:

record.ForeignId = newId;

由于抛出 System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException() 的 SQLMetal 代码,它以“由于对象的当前状态,操作无效”而爆炸。

我不是第一个遇到这个问题的人:

LinqToSQL Error : Operation is not valid due to the current state of the objecthttp://social.msdn.microsoft.com/forums/en-US/linqtosql/thread/f9c4a01a-195a-4f2b-a1cb-e2fa06e28b25/讨论它,等等。

他们的解决方案是这样的:

record.Foreign = Database.Foreigns.Single(c => c.Id == newId);

这当然会导致对 Foreign 进行数据库查找,只是为了取回具有我已知 ID 的对象!那么,如果没有毫无意义的查询(或者如果我有很多这样的 FK 则进行查询),我该如何完成此更新?

最佳答案

您可以新建一个父实例(具有正确的 Id),附加它作为现有记录状态到数据上下文,然后分配您的子对象的 Parent 属性。

这是一些代码:

int theId = 5;
Parent p = new Parent() { Id = theId};
dc.Parents.Attach(p);
child.Parent = p;

关于c# - 如何在 LINQ to SQL/SQLMetal 中有效地更新外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3637000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com