Tj *_*lie 55
您始终可以将某些内容附加到DataContext的.Log属性.这将显示发送时的所有SQL命令.
我在我的数据访问对象基础上执行此操作并将其输出到Visual Studio调试控制台.当对象创建他们的DataContext时,我检查它是否调试并附加一个TextWritter助手类,如下所示:
dbDataContext _dB = new dbDataContext();
_dB.CommandTimeout = 5000;
#if DEBUG
_dB.Log = new DebugTextWriter();
#endif
Run Code Online (Sandbox Code Playgroud)
这是输出到调试控制台的辅助对象:
//utility class for output of TextWriter for the Visual Sudio Debug window
class DebugTextWriter : System.IO.TextWriter
{
public override void Write(char[] buffer, int index, int count)
{
System.Diagnostics.Debug.Write(new String(buffer, index, count));
}
public override void Write(string value)
{
System.Diagnostics.Debug.Write(value);
}
public override Encoding Encoding
{
get { return System.Text.Encoding.Default; }
}
}
Run Code Online (Sandbox Code Playgroud)
nel*_*ant 26
这是我使用ObjectQuery方法发现的.使用控制台进行测试,您可以执行以下操作:
创建一个扩展方法,如下所示,然后调用它.说产品产品,然后SQL打印出product.ToTraceString.
public static class MyExtensions
{
public static string ToTraceString<T>(this IQueryable<T> t)
{
string sql = "";
ObjectQuery<T> oqt = t as ObjectQuery<T>;
if (oqt != null)
sql = oqt.ToTraceString();
return sql;
}
}
Run Code Online (Sandbox Code Playgroud)
gyo*_*dor 17
var q = from img in context.Images
...
select img;
string sql = q.ToString();
Run Code Online (Sandbox Code Playgroud)
sql 将包含sql选择查询.
编辑:缺点:此时参数不会有任何值
mar*_*c_s 15
您可以查看Linq-to-SQL Debug Visualizer,或者只是将鼠标悬停在Linq-to-SQL查询上(工具提示应显示生成的SQL),或访问:
context.GetCommand(query).CommandText
Run Code Online (Sandbox Code Playgroud)
这是我在设置数据库上下文时使用的:
this.DbContext.Database.Log += s => Debug.WriteLine(s);
Run Code Online (Sandbox Code Playgroud)