我想看看我的插入语句的外观,好像我正在接线基于文本的ado.net命令。我该怎么做呢?

我一直在遵循以下链接:

http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-ormory-ormultiple-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插入声明?

谢谢

有帮助吗?

解决方案

如何:显示生成的SQL(LINQ到SQL)

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

示例:在执行代码之前,请使用日志属性在控制台窗口中显示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

或者,您可以使用 LINQ到SQL调试可视化器 在VS 2008调试器中徘徊在LINQ表达式上,然后检查ORM在评估LINQ查询表达式时将在运行时执行的RAW SQL。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top