Log

Позволяет протоколировать команды DML, которые выполняются методом LinterDataContext.SubmitChanges().

Декларация
public TextWriter Log { get; set; }
Значение свойства

Объект типа TextWriter, который используется для протоколирования DML-команд.

Исключения
ObjectDisposedException Объект LinterDataContext освобождён методом Dispose().
Пример
// В примере создаётся класс Auto, который отображается на
// таблицу AUTO в демонстрационной БД. Выполняется
// сохранение, обновление и удаление объекта из БД.
// Команды DML протоколируются в файл log.txt
// C#
using System;
using System.Linq;
using System.ComponentModel;
using System.Data.Linq.Linter;
using System.Data.Linq.Mapping;
using System.IO;

// Класс Auto отображается на таблицу AUTO
[Table(Name = "AUTO")]
class Auto : INotifyPropertyChanging
{
  // Свойство Make отображается на поле MAKE
  [Column(Name = "MAKE")]
  public string Make
  {
    get { return _make; }
    set
    {
      if (!value.Equals(_make, StringComparison.Ordinal))
      {
        SendPropertyChanging();
        _make = value;
      }
    }
  }
  private string _make;

  // Свойство Model отображается на поле MODEL
  [Column(Name = "MODEL")]
  public string Model
  {
    get { return _model; }
    set
    {
      if (!value.Equals(_model, StringComparison.Ordinal))
      {
        SendPropertyChanging();
        _model = value;
      }
    }
  }
  private string _model;

  // Свойство PersonId отображается на поле PERSONID
  [Column(Name = "PERSONID", IsPrimaryKey = true)]
  public int PersonId
  {
    get { return _personId; }
    set
    {
      if (value != _personId)
      {
        SendPropertyChanging();
        _personId = value;
      }
    }
  }
  private int _personId;

  private void SendPropertyChanging()
  {
    if (PropertyChanging != null)
    {
      PropertyChanging(this, new PropertyChangingEventArgs(string.Empty));
    }
  }

  public event PropertyChangingEventHandler PropertyChanging;
}

class LogSample
{
  static void Main()
  {
    // Формирование строки соединения
    var connectionStr = "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8";

    // Создание лога
    using (var log = new StreamWriter("log.txt"))
    {
      // Создание контекста
      using (var context = new LinterDataContext(connectionStr))
      {
        context.Log = log;

        // Сохранение нового объекта
        var auto = new Auto
        {
          Make = "MAKE AUTO",
          Model = "MODEL AUTO",
          PersonId = 1001
        };
        context.GetTable< Auto >().InsertOnSubmit(auto);
        context.SubmitChanges();

        // Обновление объекта
        auto.Model = "NEW MODEL";
        context.SubmitChanges();

        // Удаление объекта
        context.GetTable< Auto >().DeleteOnSubmit(auto);
        context.SubmitChanges();
      }
    }
  }
}

Если запустить пример, то в файл log.txt будет выведен следующий текст:

INSERT INTO AUTO (MAKE, MODEL, PERSONID) VALUES ('MAKE AUTO', 'MODEL AUTO', 1001);
UPDATE AUTO
   SET MAKE = :MAKE, MODEL = :MODEL, PERSONID = :PERSONID
 WHERE (PERSONID = 1001);
DELETE FROM AUTO
 WHERE (PERSONID = 1001);