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