2010-06-02 34 views
4

我想看看我的插入語句將看起來像,如果我連接 了基於文本的ADO.NET命令。我該怎麼做呢?使用LINQ的SubmitChanges時插入語句的檢查

我一直跟隨下面的鏈接:

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插入聲明正確嗎?

感謝

回答

1

How to: Display Generated SQL (LINQ to SQL)

您可以用日誌屬性中的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 

或者,你可以使用LINQ to SQL Debug Visualizer到LINQ表達懸停而在VS 2008調試器,然後檢查原始SQL的ORM將在運行時評估LINQ查詢表達式時執行。

+0

謝謝我跟着,但我似乎無法讓控制檯窗口出現。我的SubmitChanges語句必須成功執行控制檯窗口以顯示代碼嗎?它在那裏失敗。 – 2010-06-02 21:34:28

+0

謝謝 - 用LINQ to SQL Debug Visualizer解決。這幾乎是我正在尋找的東西。再次感謝。 – 2010-06-03 02:13:51

+1

@Code Sherpa:我很高興你找到了你的解決方案。我認爲Visualizer是一個很棒的工具,值得下載,因爲你可能會經常使用它。它不需要編寫特殊的代碼,當您部署時,您真的不想在代碼中留下任何代碼。 – DOK 2010-06-03 14:40:36