使用Linq-to-SQL更新记录
本文关键字:新记录 更新 Linq-to-SQL 使用 | 更新日期: 2023-09-27 18:12:03
我做我的查询…
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();
由于UserID
是主键,因此该查询将只检索1条记录。
我已经这么做过很多次了,而且很有效。我找到的每一个例子都是我所拥有的。
也许你在不同的环境下工作?尝试使用
封装它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: Row not found or changed。在数据上下文上调用SubmitChanges()时出现错误