Entity Framework в многоуровневых архитектурах - Создание модели
ОГЛАВЛЕНИЕ
Создание модели
Теперь, после представления общего обзора работы слоев в архитектуре, рассмотрим ключевые аспекты всех слоев, относящихся к Entity Framework. Поскольку для приложения уже существует база данных, я создал сущностную модель, используя базу данных NorthwindEF в качестве отправной точки.
Кроме того, я мог сначала создать сущностную модель, а потом сопоставить сущности с базой данных. Мастер EDM помогает в создании модели базовой сущности, которая затем может быть нужным образом изменена для включения наследования, разделения сущностей и других концепций моделирования домена. На рис. 2 показан мастер EDM со всеми таблицами и хранимыми процедурами, выбранным для импорта в EDM.
Рис. 2. Создание модели на основе базы данных
Один вопрос относительно EDM, который часто вызывает путаницу, это соглашение об именовании по умолчанию для наборов EntitySet и объектов EntityTypes. Я использую единичные имена для всех сущностей в моделях областей. Я создаю экземпляр Customer или возвращаю список экземпляров Order с помощью List<Order>. Все сущности – это единственные экземпляры плана, свойства которого определяют сущность.
С другой стороны, для наборов EntitySet я использую соглашение о множественных наименованиях. Наборы EntitySet часто используются в запросах LINQ при запросе контекста ObjectContext на ссылку на набор объектов Customer или Order.
В качестве примера рассмотрим следующий запрос LINQ к Entities:
var q = from c in context.Customers
select c;
List<Customer> customerList = q.ToList();
Этот запрос указывает LINQ к Entities на доступ к набору EntitySet с именем Customers и возврат всех экземпляров сущности Customer по выполнении. Вторая строка выполняет запрос и возвращает List<Customer> локальной переменной customerList. В данном примере EntitySet имеет множественное число, из чего понятно, что выполняется запрос наборов EntitySet и возвращаются экземпляры сущности Customer (обратите внимание на единственное число).
Необходимо ли придерживаться такого соглашения об именовании? Конечно, нет. Однако это делает код более удобным для чтения. В противном случае мастер EDM по умолчанию возвращает наборы EntitySet с именами Customer и EntityType с именем Customers, в результате чего запрос LINQ к Entities выглядит следующим образом:
var q = from c in context.Customers
select c;
List<Customers> customerList = q.ToList();
При создании модели мастером EDM имена EntitySet и EntityType могут быть просто изменены. Для этого необходимо выбрать сущность в схеме, просмотреть ее свойства в окне «Properties» (Свойства) и изменить нужный параметр (см. рис. 3). Для этого приложения я установил для всех объектов EntityType единственное число с помощью свойства Name. Я не изменял свойство Name набора EntitySet, поскольку для него уже установлено множественное число.
Рис. 3. Изменение имен EntityType