当某些应用程序代码被执行时,如何识别所有写入的表?

时间:2013-10-22 15:13:07

标签: sql-server asp.net-mvc

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

2 个答案:

答案 0 :(得分:3)

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

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

  • 转到事件选择
  • 选中“显示所有列”
  • 打开“列过滤器”
  • 在过滤器列表中输入您的数据库名称,以及您可能感兴趣的任何其他内容(通常,默认设置正常)

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

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

答案 1 :(得分:1)

如果您正在使用Entity Framework,则可以询问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
    }
}