[英]Updating a record using Linq-to-SQL
我查询...
var result = from u in tdc.tblUsers
where u.UserID == userID
select u;
然后我改变我想要的值:
foreach (tblUsers u in result)
{
//change values (and no im not changing the primary key or foreign keys)
}
然后我提交更改
tdc.SubmitChanges();
当它命中提交更改时,它会抛出未找到或已更改行的异常。 我是唯一一个使用它的人,因此访问数据库或锁定没有其他冲突。 为什么会抛出ChangeConflictException
? 我已经使用调试器,数据一直持续整个过程,包括我正在尝试进行的更改。
我之前也尝试过这种方式并得到同样的错误
tblUsers result = (from u in tdc.tblUsers
where u.UserID == userID
select u).Single();
result.Address = address;
result.Phone = phone;
tdc.SubmitChanges();
它将只使用此查询检索1条记录,因为UserID
是主键。
我已经做了很多次这样做了。 我发现的每个例子都是我所拥有的。
也许你在不同的背景下工作? 尝试使用封装它
using (myContext ctx = new myContext())
{
var user = ctx.users.first();
user.name="blah";
ctx.SubmitChanges();
}
通常,如果你看一下Linq-to-SQL生成的实际SQL,你会发现它与你最初检索的数据库行匹配时真的过于热心了。 假设您有一个包含列ID(PK),A,B,C的表。您可能会认为,如果您更新了一行C列,则应该使用匹配的主键更新该行。 但经常发生的是Linq-to-SQL也试图匹配A列和B列。 通常,这没关系。 除非您有多个线程或多进程的并发写入,否则其他内容会修改您尝试更新的记录的A列或B列。 然后你得到这些System.Data.Linq.ChangeConflictException:未找到或更改行。 在数据上下文中调用SubmitChanges()时出错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.