C # Linq-to-Sql - следует ли утилизировать DataContext с помощью IDisposable - PullRequest
27 голосов
/ 04 мая 2009

У меня есть несколько методов, которые работают с БД, и все они начинаются с вызова

FaierDbDataContext db = new FaierDbDataContext();

Так как объект DataContext Linq2Sql реализует IDisposable, следует ли использовать его с «using»?

using (FaierDbDataContext db = new FaierDbDataContext()) {
    // use db here
}

Каковы последствия использования его так или иначе?

1 Ответ

29 голосов
/ 04 мая 2009

В отличие от большинства типов, которые реализуют IDisposable, DataContext не действительно нужно избавиться - по крайней мере, нет в большинстве случаев. Я спросил Мэтта Уоррена об этом дизайнерском решении, а здесь был его ответ:

Есть несколько причин, по которым мы реализовали IDisposable:

  • Если логике приложения необходимо удерживать сущность за пределами, когда Ожидается использование DataContext или действительно, вы можете обеспечить выполнение этого контракта вызывая утилизировать. Отложенные погрузчики в эта сущность все еще будет ссылаться DataContext и постараюсь его использовать если какой-либо код пытается перемещаться отложенные свойства. Эти попытки не удастся. Распоряжаться также заставляет DataContext для сброса своего кэша материализованные объекты, так что один кэшированная сущность не будет случайно поддерживать в живых все сущности через этот DataContext, который будет в противном случае вызвать то, что кажется утечка памяти.
  • Логика, которая автоматически закрывает соединение DataContext, может быть обманом ушел из соединения открыть. DataContext опирается на код приложения, перечисляющий все Результаты запроса с момента получения до конец результирующего набора вызывает соединение закрыть. Если приложение использует IEnumerable Метод MoveNext вместо foreach заявление в C # или VB, вы можете выйти Перечень преждевременно. Если твой приложение испытывает проблемы с соединения не закрываются и вы подозреваю автоматическое закрытие не работает, вы можете использовать утилизацию шаблон как обходной путь.

из источника

...