2010-08-14 4 views
1

Я новичок в linq-to-sql (и sql, если на то пошло), и я начал собирать доказательства того, что, возможно, я не делаю все правильно, поэтому я хотел посмотреть, что вы все должны сказать.Как долго хранить DataContext LINQ-to-SQL?

В моем приложении распределения персонала Я разрешаю пользователю создавать задания между сотрудниками и проектами. В начале приложения я открываю контекст данных linq-to-sql в моей базе данных управления. Во всей программе я никогда не позволяю этому контексту данных идти. По сути, большинство конструкторов форм принимают этот контекст данных как один из своих аргументов.

Я подумал, что это был способ сделать что-то, пока я не прочитал еще один вопрос о том, где спрашивал, повторял ли он повторное создание контекста данных на протяжении всей своей программы, а затем «прикреплял» сущности к новым контекстам данных как необходимо. Это поможет мне обойти проблему, с которой я столкнулся, когда вещи «прокрадываются» в мою базу данных.

Итак, где бы вы использовали первый стиль (и не стесняйтесь говорить никогда), и где бы вы использовали второй стиль?

ответ

5

Если вы пишете веб-приложение, например, в ASP.NET MVC или в веб-службе, вы будете каждый раз воссоздавать DataContext, поскольку приложение является «без гражданства» между страницами GET и POST.

Если вы пишете приложение Winforms или WPF, вы можете сделать это таким же образом, хотя держать DataContext open проще, поскольку приложения Winforms имеют состояние (т.е. у вас есть контейнер для существования DataContext) ,

В целом, вероятно, разумно открывать DataContext каждый раз, когда вам нужно заполнить "unit of work.". Сам DataContext довольно легкий, поэтому открытие одного для каждой «транзакции» не является чем-то большим. Эта практика также согласуется с уровнями программного обеспечения в корпоративных приложениях (например, в базе данных, DAL, Service Layer, Repository и т. Д.) И помогает обеспечить разделение проблем между требуемыми уровнями.

1

Обычно рекомендуется делать все, чтобы создать новый DataContext для каждой атомной операции. DataContext на самом деле довольно дешев для создания экземпляров и очень хорошо подходит для быстрого оборота.

Как правило, я обычно создаю экземпляр DataContext, выполняю операцию CRUD, а затем удаляю его снова. Это может быть обновление одного объекта или вставка нагрузки объектов. Сделайте все, что имеет смысл для вашего сценария.

Просто будьте осторожны, если вы передаете сущности из вашего контекста вокруг, так как будут исключены исключения, если вы попытаетесь перечислить или получить связанные данные. Лучше всего преобразовать объекты LINQ в независимые объекты (например, Person Объект LINQ может быть преобразован в PersonResult, который потребляется логическим уровнем вашего решения).

Надеюсь, что это поможет!

Смежные вопросы