在Linq To SQL中是否有任何方法可以获取SubmitChanges()调用中发生的基础(原始)SQL?

时间:2010-02-24 18:43:20

标签: asp.net linq-to-sql

我正在研究一种内容管理系统,该系统正在改进现有数据库,并且数据库有许多表。将有一个临时数据库,我们将在其中进行更改并允许用户“就地预览”。然后必须批准任何更改,并发布它们,我们将连接到同一数据库的实时版本(相同的架构)并播放捕获的更改。

我找到了一些代码(称为Doddle Audit),通过一些自定义,可以为我提供有关正在发生变化的重要信息。我能够获得更新,插入和删除之前和之后的所有列的列表。但我真正想要的是由SubmitChanges()运行的底层SQL。 LinqToSql必须生成这个,所以为什么我不能拥有它?

我已经google了一下,看了一下涉及SubmitChanges的代码,把东西搞砸了,我似乎无法找到它。有没有人知道如何获得这个?

4 个答案:

答案 0 :(得分:3)

使用DataContext.Log属性,如下所示:

using(DataContext dc = new DataContext()){
  StringBuilder sb = new StringBuilder();
  dc.Log = new StringWriter(sb);
}

您将在调试模式下看到生成的查询。

答案 1 :(得分:2)

Linq To Sql Profiler。它做到了这一点,还有更多。

答案 2 :(得分:1)

你可以试试这个:

Console.WriteLine(context.GetCommand(查询).CommandText);

希望这有帮助。

谢谢,

拉​​加

答案 3 :(得分:0)

您可以使用SQL Server Profiler,不如Linq To SQL Profiler,但免费。

要在字符串中获取sql语句,您可以执行以下操作:

using (var context = new MyDataContext()) 
{
   var query = from p in context.Persons
             select p;
   string sql = context.GetCommand(query).CommandText;


}