如何获取LinqToSql生成的sql update方法?

时间:2010-01-24 12:41:14

标签: sql linq-to-sql

如何获取LinqToSql为更新方法生成的sql?

我使用以下代码在VS2008的调试输出窗口中显示由LinqToSql生成的sql,但它只获取生成的sql select方法,

如何找到LinqToSql生成的sql update方法?

我知道Sql Server Profiler和LinqPad可以获取它(生成sql-update),但我想在VS2008中显示它们或将它们记录到文件中。

public partial class Linq2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            DemoDataContext ctx = new DemoDataContext ();

            // Then attach it to the Log property of your DataContext...
            ctx.Log = new DebugTextWriter();

            var product = ctx.Products.FirstOrDefault(); 

            product.ProductName = "NewName1";

            ctx.SubmitChanges();            

        }
    }

    // Add this class somewhere in your project...
    public 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; }
        }
    }

我在VS2008调试输出窗口中获得了sql-select查询:

SELECT TOP (1) [t0].[Id], [t0].[ProductName] ……
FROM [dbo].[Products] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1

2 个答案:

答案 0 :(得分:1)

您的数据库上下文对象具有可以覆盖的Log方法。可以通过此Log方法捕获完整的Update语句以及Linq-To-SQL生成的每个SQL命令。我知道这很有效,因为我用它来捕获我们应用中的所有查询。请记住,L2S可以向Log方法发送大量输出,因此请务必捕获所有输出。你的Update语句就在那里。

答案 1 :(得分:0)

感谢您的所有答案。 我找到了Linq To Sql Profiler来解决这个问题。