如何在LINQ to SQL中查找受影响的行数?

时间:2009-09-14 01:05:25

标签: linq-to-sql

有没有人知道如何在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()之前将有多少更新。

有没有找出实际受影响的行数?

4 个答案:

答案 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();