0

LINQ to SQL によって行われたデータベース呼び出しを、その呼び出しを生成した .NET コードまで追跡することに興味があります。たとえば、DBA は、キャッシュされた特定の実行計画がうまく機能していないことを懸念している場合があります。たとえば、DBA が開発者に次のコードに対処するように指示した場合...

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 コードに ID またはラベルを添付する方法はありますか? 大声で考えてみると、「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 で終わる場合、私は設定されます。ありがとう。

4

2 に答える 2

1

このようなタグ付け機能を実装するためにLINQtoSQLが生成する基になるSQLを変更する公的な方法はありません。Logプロパティは、参照用にどのメソッドがどのSQLステートメントを生成したかを示すために、呼び出しスタック情報を含むテキストログファイルを書き出すように実装できます。

于 2008-09-19T16:30:00.090 に答える
1

DataContext.Log プロパティを使用して T-SQL をキャプチャすることを検討しましたか? タグ プロパティも持つオブジェクトにそれを取り込むことができた場合、アプリケーションが実行する SQL をカタログ化できる可能性があります。

于 2008-09-19T05:38:12.180 に答える