有没有人知道如何在LINQ to SQL中提交对数据上下文的更改后查找受影响的行数?
起初我做的是这样的事情:
Using db as New MyDataContext()
db.Users.Attach(modifiedUser, True)
db.SubmitChanges()
Dim rowsUpdated As Integer = db.GetChangeSet().Updates.Count
End Using
我已经发现这不起作用
db.GetChangeSet().Updates.Count
仅告诉您在调用SubmitChanges()之前将有多少更新。
有没有找出实际受影响的行数?
答案 0 :(得分:4)
L2S为受影响的每一行发出单独的插入/更新/删除语句,因此计算GetChangeSet结果中的实体将为您提供正确的“受影响的行数”*。
如果由于更改冲突或类似情况而无法更新任何行,则在submitchanges期间会出现异常,并且将回滚该事务。
(* = ...但有一个例外;如果您有任何可更新的视图,而不是触发器,您可能会遇到这样的情况:触发器触发了每个更新的行的多个底层行。但这是有点边缘情况...... :))
答案 1 :(得分:0)
我没有参与LINQ to SQL。但是,我认为这可能是不可能的。
我想到的原因是:您可以在调用SubmitChanges
之前对多个实体进行更新。因此,我猜想,你所寻找的“受影响的记录”将不会被人知道。
答案 2 :(得分:0)
由于可能会提交许多不同的操作,因此您很可能无法获取此类信息。
SubmitChanges()命令将提交插入,更新和删除,据我所知,无法检索每个受影响的行数(#rows deleted / updated / inserted等)。你所能做的就是看你将要发现的事情。
如果您特别想要执行一个操作,则可以使用ExecuteCommand()方法返回受影响的行数。
答案 3 :(得分:0)
按以下顺序调用它,您将获得计数
将行更新为整数= db.GetChangeSet()。Updates.Count
db.SubmitChanges();