如何獲取由LinqToSql生成的更新方法的sql?如何獲取由LinqToSql生成的sql更新方法?
我用下面的代碼顯示在VS2008的調試輸出窗口由LinqToSql生成的SQL,但它只是變得生成的SQL SELECT方法,
我怎麼能找到被LinqToSql生成的SQL更新方法?
我知道Sql Server Profiler和LinqPad可以得到它(生成的sql-update),但我想在VS2008中顯示它們或將它們記錄到文件中。
public partial class Linq2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DemoDataContext ctx = new DemoDataContext();
// Then attach it to the Log property of your DataContext...
ctx.Log = new DebugTextWriter();
var product = ctx.Products.FirstOrDefault();
product.ProductName = "NewName1";
ctx.SubmitChanges();
}
}
// Add this class somewhere in your project...
public class DebugTextWriter : System.IO.TextWriter
{
public override void Write(char[] buffer, int index, int count)
{
System.Diagnostics.Debug.Write(new String(buffer, index, count));
}
public override void Write(string value)
{
System.Diagnostics.Debug.Write(value);
}
public override Encoding Encoding
{
get { return System.Text.Encoding.Default; }
}
}
我也得到在VS2008調試輸出窗口中的SQL選擇查詢:
SELECT TOP (1) [t0].[Id], [t0].[ProductName] ……
FROM [dbo].[Products] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1
你能提供更多的細節嗎?我在上下文中找不到sql語句.Log – Mike108 2010-01-25 02:50:08
上下文對象有一個System.IO.TextWriter方法,您可以將偵聽器附加到該方法。在我的情況下,我創建了一個名爲SQLLogWriter的StringWriter類,並執行以下操作:context.Log = SQLLogWriter。所有的L2S輸出都會發給這位作者。 – 2010-01-25 12:40:49
你能提供代碼嗎?我使用了一些StringWriter類,它們只記錄L2S的sql select語句。你確定你可以將sql更新語句記錄到StringWriter類嗎? – Mike108 2010-01-25 22:07:02