DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 105, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.




Tag Cloud

Archives

Post Categories

My English Blog

LINQ To SQL: la proprietà DataContext.Log

Sebbene si possano utilizzare comodamente strumenti tipo SQL Server Profiler per analizzare gli statement generati da LINQ to SQL, un modo alternativo sicuramente molto veloce si basa sulla proprietà DataContext.Log (di tipo System.IO.TextWriter), che permette di specificare la destinazione su cui verrà scritto automaticamente il log dei comandi/query SQL autogenerati. Ad esempio, il seguente codice:

NorthwindDataContext NorthwindDC = new NorthwindDataContext();
NorthwindDC.Log = Console.Out;

var
results = from c in NorthwindDC.Customers
              where c.CustomerID.StartsWith("A")
              select new { c.CustomerID, c.ContactName, c.Country };

permette di "forzare" (tramite la riga NorthwindDC.Log = Console.Out;)  la scrittura dello statement SQL generato nella console:


SELECT [t0].[CustomerID], [t0].[ContactName], [t0].[Country]

FROM [dbo].[Customers] AS [t0]
WHERE [t0].[CustomerID] LIKE @p0
-- @p0: Input NVarChar (Size = 2; Prec = 0; Scale = 0) [A%]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8


In aggiunta, un utilizzo sicuramente interessante potrebbe essere applicato al nuovo LinqDataSource di ASP.NET 3.5. Ad esempio, potremmo pensare di implementare l'evento ContextCreated del nostro LinqDataSource in modo da impostare la proprietà Log del nostro DataContext su uno StringWriter: in questo modo, qualora volessimo visualizzare lo statement SQL autogenerato dal LinqDataSource direttamente nella nostra pagina, potremmo semplicemente ricorrere ad una Label (es. LogLabel) da inizializzare all'occorrenza dell'evento Selected del LinqDataSource:


System.IO.StringWriter text_writer = new System.IO.StringWriter();

protected void MyLinqDataSource_ContextCreated(object sender, LinqDataSourceStatusEventArgs e)
{
 
System.Data.Linq.DataContext data_context = (System.Data.Linq.DataContext)e.Result;
 
data_context.Log = text_writer;
}


protected
void MyLinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e)
{
 
LogLabel.Text = text_writer.ToString();
}

Technorati tags:  LINQ

Print | posted on lunedì 28 gennaio 2008 01:30 |

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET