Как получить метод обновления sql, сгенерированный LinqToSql? - PullRequest
1 голос
/ 24 января 2010

Как получить sql, сгенерированный LinqToSql для метода обновления?

Я использую следующий код, чтобы показать sql, сгенерированный LinqToSql в окне вывода отладки VS2008, но он получает только сгенерированный метод выбора sql,

как найти метод обновления sql, сгенерированный LinqToSql?

Я знаю, что Sql Server Profiler и LinqPad могут его получить (сгенерированное sql-обновление), но я хочу показать их в 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; }
        }
    }

И я получаю запрос sql-select в окне вывода отладки VS2008:

SELECT TOP (1) [t0].[Id], [t0].[ProductName] ……
FROM [dbo].[Products] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1

Ответы [ 2 ]

1 голос
/ 24 января 2010

Ваш контекстный объект базы данных имеет метод Log, который вы можете переопределить. Ваш полный оператор Update и каждая команда SQL, сгенерированная Linq-To-SQL, могут быть записаны с помощью этого метода Log. Я знаю, что это работает, потому что я использую его для захвата всех наших запросов в нашем приложении. Просто имейте в виду, что L2S может посылать достаточное количество выходных данных в метод Log, поэтому убедитесь, что все это зафиксировано. Ваше заявление об обновлении где-то там.

0 голосов
/ 20 февраля 2010

Спасибо за все ответы. Я нашел Linq To Sql Profiler для решения проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...