linqlinq-to-sqldebuggingloggingsubmitchanges

Inspection of Insert Statement When Using LINQ's SubmitChanges


I want to see what my insert statement would look like as if I was wiring up an text-based ADO.NET command. How do I do this?

I have been following the below link:

http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

And have added the DebugTextWriter class to my project. So, now, in my code I have the following which doesn't really do anything and I don't think its right:

    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();
    }

Any ideas what I am doing wrong and/or how to inspect my LINQ insert statement correctly?

Thanks


Solution

  • How to: Display Generated SQL (LINQ to SQL)

    You can view the SQL code with the Log property.

    Example: use the Log property to display SQL code in the console window before the code is executed. You can use this property with query, insert, update & delete commands.

    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);
    }
    

    These lines from the console window are what you see when you execute the C# code above.

    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
    

    Alternately, you can use the LINQ to SQL Debug Visualizer to hover over a LINQ expression while in the VS 2008 debugger, and then inspect the raw SQL that the ORM will execute at runtime when evaluating the LINQ query expression.