如何获得TSQL查询,从皇宫属性.SubmitChanges()
-
10-07-2019 - |
题
我使用的是皇宫SQL。我有一个属性,对此我.SubmitChanges()'ing.有一个错误,插入的身份的领域,并且我想看到的查询是用来插入此身份领域。
我没有看到查询本身内部的快速监视;我在哪里可以找到从内部调试器?
解决方案
有其实是一个很简单的回答你的问题。
只需粘贴在监视窗口
((System.Data.Objects.ObjectQuery)myLinqQueryVar).ToTraceString()
其他提示
这是很多人一直在写自己的“DebugWriter”和连接它,像这样:
// Add this class somewhere in your project...
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; }
}
}
// Then attach it to the Log property of your DataContext...
myDataContext.Log = new DebugTextWriter()
这是LINQ到SQL是做在Visual Studio中的调试窗口,这将输出的一切。
继 Portman的答案,如果你是一个控制台应用程序,它是那样简单:
myDataContext.Log = Console.Out;
或者你可以使用类似LINQ2SQL探查这是一个相当优秀的工具,实际上对于工作的工具:
运行SQL事件探查器,如果你拥有它。它会显示所有的流量到你的数据库,包括SQL命令文本。
FooDataContext dc = new FooDataContext();
StringBuilder sb = new StringBuilder();
dc.Log = new StringWriter(sb);
var result=from r in dc.Tables select d;
.....
string query=sb.ToString();
我同意皇宫SQL探查是正确的工具为这项工作。但如果你不想花钱或只需要做一些简单的,我喜欢的DebugTextWriter的方法。
在阅读这个问题我去寻找一些更强大。事实证明戴米恩的护卫还 写了一个非常不错的文章 关于建立不同作家来处理不同的东西喜欢输出到存储器,调试、文件、多目的地,或即使采用简单的代表。
我伤了使用几个他的想法写一ActionTextWriter,可以处理一个以上的委托,我想分享它在这里:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace Writers
{
public class ActionTextWriter : TextWriter
{
protected readonly List<Action<string>> Actions = new List<Action<string>>();
public ActionTextWriter(Action<string> action)
{
Actions.Add(action);
}
public ActionTextWriter(IEnumerable<Action<string>> actions)
{
Actions.AddRange(actions);
}
public ActionTextWriter(params Action<string>[] actions)
{
Actions.AddRange(actions);
}
public override Encoding Encoding
{
get { return Encoding.Default; }
}
public override void Write(char[] buffer, int index, int count)
{
Write(new string(buffer, index, count));
}
public override void Write(char value)
{
Write(value.ToString());
}
public override void Write(string value)
{
if (value == null)
{
return;
}
foreach (var action in Actions)
{
action.Invoke(value);
}
}
}
}
你可以添加尽可能多的行动,因为你喜欢。这个例写入一个记录文件和控制台在Visual Studio通过调试。写:
// Create data context
var fooDc = new FooDataContext();
// Create writer for log file.
var sw = new StreamWriter(@"C:\DataContext.log") {AutoFlush = true};
// Create write actions.
Action<string> writeToDebug = s => Debug.Write(s);
Action<string> writeToLog = s => sw.Write(s);
// Wire up log writers.
fooDc.Log = new ActionTextWriter(writeToDebug, writeToLog);
当然,如果你想做简单的使用的袖口,你总是可以 延长 ActionTextWriter...编写通用和重复使用的方法,对吗?
using System.Diagnostics;
using System.IO;
namespace Writers
{
public class TraceTextWriter : ActionTextWriter
{
public TraceTextWriter()
{
Actions.Add(s => Trace.Write(s));
}
}
public class FileTextWriter : ActionTextWriter
{
public FileTextWriter(string path, bool append = false)
{
var sw = new StreamWriter(path, append) {AutoFlush = true};
Actions.Add(sw.Write);
}
}
}
不隶属于 StackOverflow