我使用的是皇宫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探查这是一个相当优秀的工具,实际上对于工作的工具:

  

LINQ到SQL探查 - 对LINQ实时可视化调试器到SQL

运行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);
        }
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top