В данной заметке я постарался рассмотреть Entity Framework и подход к проектированию Code First с точки зрения человека, который не имел дело с ORM и Entity Framework и пытается подробно разобраться, как это все работает.
При работе с БД всегда возникает вопрос, как организовать эту самую работу и где размещать бизнес логику. Способов много, но один умный дядька собрал все воедино, классифицировал, углубил и обострил — и выпустил книгу Архитектура корпоративных программных приложений. С тех пор, в холиварах по размещению бизнес логики появились конкретные термины, в частности два наиболее распространенных из них: Transaction Script (логика в процедурах) и Domain Model (логика в объектах модели). Не будем здесь обсуждать, какой поход лучше, только скажу, что мое мнение — обсуждать инструмент в отрыве от задачи бессмысленно.
До недавних пор почти всю логику мне приходилось писать в хранимых процедурах на сервере, но настало время посмотреть более подробно, что же твориться во «вражеском» лагере. А творятся там интересные вещи, работа ведется с объектами, а объекты стыкуются с БД при помощи средств объектно-реляционного отображения (Object Relational Mapping — ORM). Одной из систем ORM является Entity Framework (EF) от Microsoft, именно ее я выбрал жертвой своих бесчеловечных экспериментов.
Прежде чем продолжить, хочу сказать, что, хотя EF довольно молод, по нему уже есть куча замечательного материала, руководств и tutorial-ов. В частности, рекомендую к ознакомлению руководство по созданию модели EF на сайте asp.net (eng), которое, кстати, так же доступно в виде pdf или его русскую адаптацию в блоге Владимира Юнева. Если вы преследуете цель максимально быстро начать использовать EF, не вдаваясь в подробности его работы, то смело переходите по указанным выше ссылкам, а к этой статье вернетесь позже, если будет такой интерес. Если же вам, как и мне, всегда интересно, что скрывается за тем, когда несколько строк кода приводят к созданию запросов, таблиц и целой БД — тогда давайте разбираться дальше вместе.
Читать дальше…