如何获取LinqToSql为更新方法生成的sql?
我使用以下代码在VS2008的调试输出窗口中显示由LinqToSql生成的sql,但它只获取生成的sql select方法,
如何找到LinqToSql生成的sql update方法?
我知道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查询:
SELECT TOP (1) [t0].[Id], [t0].[ProductName] ……
FROM [dbo].[Products] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1
答案 0 :(得分:1)
您的数据库上下文对象具有可以覆盖的Log方法。可以通过此Log方法捕获完整的Update语句以及Linq-To-SQL生成的每个SQL命令。我知道这很有效,因为我用它来捕获我们应用中的所有查询。请记住,L2S可以向Log方法发送大量输出,因此请务必捕获所有输出。你的Update语句就在那里。
答案 1 :(得分:0)
感谢您的所有答案。 我找到了Linq To Sql Profiler来解决这个问题。