2008-09-19 58 views
0

我感興趣的是將由LINQ to SQL進行的數據庫調用追溯到生成調用的.NET代碼。例如,DBA可能會擔心特定的緩存執行計劃效果不佳。例如,如果一個DBA要告訴開發商,以解決下面的代碼...附加一個ID /標籤到LINQ to SQL生成的代碼?

exec sp_executesql N'SELECT [t0].[CustomerID] 
FROM [dbo].[Customers] AS [t0] 
WHERE [t0].[ContactName] LIKE @p0 
ORDER BY [t0].[CompanyName]', 
'N'@p0 nvarchar(2)',@p0=N'c%' 

...這不是很明顯這LINQ語句生成呼叫。當然你可以在自動生成的數據上下文中搜索「Customers」類,但這只是一個開始。隨着一個大型應用程序,這可能很快變得難以管理。

有沒有辦法將標識或標籤附加到由LINQ to SQL生成和執行的SQL代碼?大聲思考,這裏有一個名爲「TagWith」的擴展函數,從概念上說明了我所感興趣的事情。

var customers = from c in context.Customers 
       where c.CompanyName.StartsWith("c") 
       orderby c.CompanyName 
       select c.CustomerID; 

foreach (var CustomerID in customers.TagWith("CustomerList4")) 
{ 
    Console.WriteLine(CustomerID); 
} 

如果「CustomerList4」ID /標籤結束於自動生成的SQL中,我將被設置。謝謝。

回答

1

沒有公共的方法來修改LINQ to SQL生成的底層SQL來實現這樣的標記工具。您可以通過用一些調用堆棧信息寫出文本日誌文件來實現Log屬性,以顯示哪些方法生成了哪些SQL語句以供參考。

1

你看過捕獲帶有DataContext.Log屬性的T-SQL嗎?如果你能夠把它變成一個也有你的標籤屬性的對象,你可能能夠編目你的應用程序執行的SQL。