我正在研究一种内容管理系统,该系统正在改进现有数据库,并且数据库有许多表。将有一个临时数据库,我们将在其中进行更改并允许用户“就地预览”。然后必须批准任何更改,并发布它们,我们将连接到同一数据库的实时版本(相同的架构)并播放捕获的更改。
我找到了一些代码(称为Doddle Audit),通过一些自定义,可以为我提供有关正在发生变化的重要信息。我能够获得更新,插入和删除之前和之后的所有列的列表。但我真正想要的是由SubmitChanges()运行的底层SQL。 LinqToSql必须生成这个,所以为什么我不能拥有它?
我已经google了一下,看了一下涉及SubmitChanges的代码,把东西搞砸了,我似乎无法找到它。有没有人知道如何获得这个?
答案 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;
}