Особенности внедрения

Платформенным уровнем доступа к базе есть встроенный в.net 3.5 – Linq to Sql. Linq to Sql – это one-to-one table mapper, тоесть работает он достаточно просто. Подключившись к серверу Sql, он получает метаданные структуры таблиц, на их основе создаёт xml файл с расширением dbml. Это промежуточный файл, содержащий дополнительную абстракцию, где можно производить например переименование таблиц. Затем существуют утилиты генераторы, создающие на основании dbml, cs классы с аттрибутами. Одним из классов, есть расширение класса DataContext, который относительно ADO.NET 2.0, являеться чем-то близким к симбиозу DataSet и DataAdapter. Он загружает данные, в форме сгенерированных классов абстракций таблиц, измененяя любые из них, мы производим трассировку изменений, что используеться при сохранении в автоматическом режиме. Также контекст отвечает за транзакции, логирование действий, конкурентные запросы.

Относительно особенностей веб-приложений: контекст не имеет смысла хранить дольше одного реквеста, наоборот это может приводить к неожиданным ошибка. Тоже и с хранением состояния. По сути, дилема заключаеться в том, какое количестве записей можно было бы провести в виде одной операции с базой. Большее количество значительно эффективней, против меньшего количества одновременных операций. Зато соответственно меньше разрозненных записей, меньше проблем с устаревшими, не добавленными данными, которых будут ожидать другие пользователи и правильностью последовательности ввода зависимых записей.

Схема доступа

Опытным путём на данный момент я пришёл к выводу что оптимальным путём управления базой есть следующие несколько принципов:

1. Использовать HttpContext.Current.Context для хранения текущего контекста.

2. В Ctx создаётся singletone Model, через который идёт доступ к базе всем приложением. Описывается на Рисунок 2.4

3. Вместо стандартной схемы Рисунок 2.5, используется Рисунок 2.6.

4. Бизнес логика прописывается как методы partial классов от объектов.

public static MedData Model {        get {            if (HttpContext.Current.Items["Data_Context_Complaint"] == null) {                HttpContext.Current.Items["Data_Context_Complaint"] = new MedData();            }            return (MedData)HttpContext.Current.Items["Data_Context_Complaint"];        } }

Рисунок 2.4 – Singletone доступа к базе

using(var ctx = new DataContext()) { User user = new User {       Name = name } ctx.Users.InsertOnSubmit(user); ctx.Users.SubmitChanges(); }

Рисунок 2.5 – Вариант использования контекста

User user = new User { Name = name } Ctx.Model.Users.InsertOnSubmit(user); Ctx.Model.Users.SubmitChanges();

Рисунок 2.6 – Вариант использования контекста, с Singletone (Рисунок. 2.4)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: