【问题标题】:Inspection of Insert Statement When Using LINQ's SubmitChanges使用 LINQ 的 SubmitChanges 时检查插入语句
【发布时间】:2010-06-02 20:18:52
【问题描述】:

我想看看我的插入语句会是什么样子,就像我在接线一样 建立一个基于文本的 ADO.NET 命令。我该怎么做呢?

我一直在关注以下链接:

http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

并已将 DebugTextWriter 类添加到我的项目中。所以,现在,在我的代码中,我有以下内容并没有真正做任何事情,我认为它不正确:

    using(WorkbookDataContext dc = _conn.GetContext())
    {
        if(profile.ProfileId > 0)
        {
            dc.Profiles.Attach(profile, true);
        }
        else
        {
            dc.Profiles.InsertOnSubmit(profile);
        }

        dc.Log = new DebugTextWriter();

        #if DEBUG
            dc.Log = new System.IO.StreamWriter("linq-to-sql.log") 
            { 
                 AutoFlush = true 
            };
        #endif


        dc.SubmitChanges();
    }

任何想法我做错了什么和/或如何正确检查我的 LINQ 插入语句?

谢谢

【问题讨论】:

    标签: linq linq-to-sql debugging logging submitchanges


    【解决方案1】:

    How to: Display Generated SQL (LINQ to SQL)

    您可以使用 Log 属性查看 SQL 代码。

    示例:使用 Log 属性在代码执行之前在控制台窗口中显示 SQL 代码。 您可以将此属性与查询、插入、更新和删除命令一起使用。

    db.Log = Console.Out;
    IQueryable<Customer> custQuery =
        from cust in db.Customers
        where cust.City == "London"
        select cust;
    
    foreach(Customer custObj in custQuery)
    {
        Console.WriteLine(custObj.CustomerID);
    }
    

    控制台窗口中的这些行是您在执行上面的 C# 代码时看到的。

    SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactT
    itle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Coun
    try], [t0].[Phone], [t0].[Fax]
    FROM [dbo].[Customers] AS [t0]
    WHERE [t0].[City] = @p0
    -- @p0: Input String (Size = 6; Prec = 0; Scale = 0) [London]
    -- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20810.0
    
    AROUT
    BSBEV
    CONSH
    EASTC
    NORTS
    SEVES
    

    或者,您可以在 VS 2008 调试器中使用 LINQ to SQL Debug Visualizer 将鼠标悬停在 LINQ 表达式上,然后在评估 LINQ 查询时检查 ORM 将在运行时执行的原始 SQL表达。

    【讨论】:

    • 谢谢我关注了,但我似乎无法让控制台窗口出现。我的 SubmitChanges 语句必须成功执行,控制台窗口才能显示代码吗?它在那里失败了。
    • 谢谢 - 使用 LINQ to SQL Debug Visualizer 解决。这几乎就是我想要的。再次感谢。
    • @Code Sherpa:很高兴您找到了解决方案。我认为 Visualizer 是一个很棒的工具,非常值得下载,因为您可能会经常使用它。它不需要编写您在部署时真的不想留在代码中的特殊代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多