繁体   English   中英

使用Linq-to-SQL更新记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM