В предыдущей части мы написали парочку своих аттрибутов, с помощью которых описали маппинг C# класса на таблицу базы данных. Дальше возьмем Reflection и Generic механизмы .NET и напишем класс, который будет являться CRUD контроллером наших сущностей. Для того чтобы класс работал побыстрее, парсинг метаданных вынесен в конструктор, и заглушкой в этой реализации является один метод - ResolveConnection(). Его можно сконфигурировать как в NHibernate классом-конфигуратором, либо впрыскиванием зависимости DbProviderFactory и строки подключения, но это вопросы лишь архитектуры, и я думаю у мало-мальски толкового разработчика будет много идей на этот счет.
Read more…
.NET development
.NET development, ORM
Как известно, программисты с давних пор пытаются упростить слой работы с базами данных и используют различные ORM. ORM имеют как достоинства так и недостатки, но цель статьи не описать их, а написать простенький ORM с описанием основных подходов в этом деле. Мир .NET пестрит разными реализациями, список доступных ORM для .NET можно посмотреть например здесь: .NET ORM List. Что будет уметь наш маппер? Работать с различными БД (первоначально тестирован на MS SQL и MS Access), использовать как простые так и составные первичные ключи, обеспечивать оптимистическую блокировку при многопользовательской работе, получать значения автоинкрементных полей и счетчиков автоматически. Ну и может являться платформой для собственных изысканий
Что НЕ реализовано: маппинг полиморфных моделей (ни в одном из 3-х подходов), оптимистические блокировки timestamp, маппинг связанных сущностей, поздняя загрузка и т д.
Read more…
.NET development
.NET development, ORM