2008-09-19 3 views
0

LINQ에서 만든 데이터베이스 호출을 SQL 호출로 생성 한 .NET 코드로 다시 추적하는 데 관심이 있습니다. 예를 들어 DBA는 특정 캐시 된 실행 계획이 제대로 수행되고 있지 않을 수 있다는 우려를 나타낼 수 있습니다. 예를 들어 DBA가 ... 다음 코드를 해결하기 위해LINQ to SQL 생성 코드에 ID/레이블 첨부?

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 문이 전화를 생산하는 즉시 분명 아니다. 물론 자동 생성 된 데이터 컨텍스트에서 "고객"클래스를 검색 할 수는 있지만 그저 시작일뿐입니다. 대규모 응용 프로그램을 사용하면이 문제는 신속하게 관리하기 어려워 질 수 있습니다.

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에서 끝나면 설정됩니다. 감사.

답변

1

LINQ to SQL이 이러한 태그 지정 기능을 구현하기 위해 생성하는 기본 SQL을 수정하는 공개 방법이 없습니다. 어떤 호출 스택 정보가있는 텍스트 로그 파일을 작성하여 참조 할 수있는 SQL 문을 생성 한 메소드를 표시하는 방식으로 Log 등록 정보를 구현할 수 있습니다.

1

DataContext.Log 속성을 사용하여 T-SQL을 캡처 한 적이 있습니까? 태그 속성을 가진 객체에이 속성을 넣을 수 있다면 응용 프로그램이 실행하는 SQL을 카탈로그화할 수 있습니다.