1

我想找出在执行某些 .net 代码时被触及的表。我怎样才能做到这一点?在一个事务中可能会写入相当多的表,获得所有受影响的表的某种列表会很有帮助。

4

2 回答 2

3

在 Sql Server 中,您有一个名为 Profiler 的工具(虽然不在 Express 版本中)。转到 Management Studio,工具菜单,应该有“Sql Profiler”。它作为一个单独的应用程序运行。

盯着看时,您为它提供了与要监视的数据库服务器的连接。您可以监控各种各样的事情,但很可能您只想过滤数据库并查看查询:

  • 前往活动选择
  • 勾选“显示所有列”
  • 打开“列过滤器”
  • 在过滤器列表中输入您的数据库名称,以及您可能感兴趣的任何其他内容(大多数情况下,默认设置就可以了)

现在,当您单击“运行”时,跟踪正在运行。暂停它,将您的代码运行到您想查看正在发生什么的行,然后取消暂停。您将看到所有被执行的查询(不仅是您的代码,还有任何对 db 执行的查询)。

您没有指定您正在使用的 sql server 版本,但分析器自 v2000 以来就在那里,可能存在细微差别。

于 2013-10-22T15:23:07.947 回答
1

如果您使用的是实体框架,您可以询问 DbContext 的 ChangeTracker 属性

public class MyDbContext : DbContext
{
    // DbSet<...> stuff excluded in this sample

    public override SaveChanges()
    {
        var changes = ChangeTracker.Entries;

        // changes now contains every piece that has been touched in this DbContext before saving
    }
}
于 2013-10-22T15:25:18.347 回答