Разделение таблицы конструктора
В этом пошаговом руководстве показано, как сопоставить несколько типов сущностей с одной таблицей, изменив модель с помощью конструктора Entity Framework (конструктор EF).
Одна из причин, по которой может потребоваться использовать разделение таблиц, заключается в задержке загрузки некоторых свойств при использовании отложенной загрузки для загрузки объектов. Вы можете разделить свойства, которые могут содержать очень большой объем данных в отдельную сущность и загружать их только при необходимости.
На следующем рисунке показаны основные окна, которые используются при работе с конструктором EF.
Необходимые компоненты
Для выполнения данного пошагового руководства необходимо выполнить следующие действия.
- Последняя версия Visual Studio.
- Пример базы данных учебного заведения.
Настройка проекта
В этом пошаговом руководстве используется Visual Studio 2012.
- Откройте Visual Studio 2012.
- В меню Файл укажите Создать, затем нажмите Проект.
- В левой области щелкните Visual C#, а затем выберите шаблон консольного приложения.
- Введите TableSplittingSample в качестве имени проекта и нажмите кнопку ОК.
Создание модели на основе учебной базы данных
- Щелкните правой кнопкой мыши имя проекта в Обозреватель решений, выберите пункт "Добавить" и выберите пункт "Создать элемент".
- Выберите данные из меню слева и выберите ADO.NET модель данных сущности в области шаблонов.
- Введите TableSplittingModel.edmx для имени файла и нажмите кнопку "Добавить".
- В диалоговом окне "Выбор содержимого модели" выберите "Создать из базы данных" и нажмите кнопку "Далее".
- Нажмите кнопку "Создать Подключение". В диалоговом окне "Свойства Подключение ion" введите имя сервера (например, (localdb)\mssqllocaldb), выберите метод проверки подлинности, введите School для имени базы данных и нажмите кнопку "ОК". Диалоговое окно выбора данных Подключение ion обновляется с параметром подключения к базе данных.
- В диалоговом окне "Выбор объектов базы данных" разверните узел таблиц и проверка таблицу Person. Это добавит указанную таблицу в модель School .
- Нажмите кнопку Готово.
Отображается конструктор сущностей, предоставляющий область конструктора для редактирования модели. Все объекты, выбранные в диалоговом окне "Выбор объектов базы данных", добавляются в модель.
Сопоставление двух сущностей с одной таблицей
В этом разделе вы разделите сущность Person на две сущности, а затем сопоставите их с одной таблицей.
Примечание.
Сущность Person не содержит никаких свойств, которые могут содержать большие объемы данных; он просто используется в качестве примера.
- Щелкните правой кнопкой мыши пустую область области конструктора, наведите указатель мыши на добавление нового и нажмите кнопку "Сущность". Откроется диалоговое окно "Создать сущность ".
- Type HireInfo для имени сущности и PersonID для имени свойства ключа.
- Нажмите кнопку ОК.
- Новый тип сущности будет создан и отобразится в области конструктора.
- Выберите свойство HireDate типа сущности Person и нажмите клавиши CTRL+X.
- Выберите сущность HireInfo и нажмите клавиши CTRL+V.
- Создайте связь между Person и HireInfo. Для этого щелкните правой кнопкой мыши пустую область области конструктора, наведите указатель на добавление нового и нажмите кнопку "Связь".
- Откроется диалоговое окно "Добавить связь ". Имя PersonHireInfo присваивается по умолчанию.
- Укажите кратность 1(Один) в обоих концах связи.
- Нажмите кнопку ОК.
Для следующего шага требуется окно сведений о сопоставлении. Если вы не видите это окно, щелкните правой кнопкой мыши область конструктора и выберите пункт "Сведения о сопоставлении".
Выберите тип сущности HireInfo и нажмите кнопку< "Добавить таблицу или представление>" в окне сведений о сопоставлении.
Выберите человека из <раскрывающегося списка "Добавить таблицу или представление> ". Список содержит таблицы или представления, с которыми можно сопоставить выбранную сущность. Соответствующие свойства должны быть сопоставлены по умолчанию.
Выберите связь PersonHireInfo в области конструктора.
Щелкните правой кнопкой мыши связь в области конструктора и выберите "Свойства".
В окне "Свойства" выберите свойство "Ограничения ссылки" и нажмите кнопку с многоточием.
Выберите человека из раскрывающегося списка "Субъект ".
Нажмите кнопку ОК.
Использование модели
- Вставьте следующий код в метод Main.
using (var context = new SchoolEntities())
{
Person person = new Person()
{
FirstName = "Kimberly",
LastName = "Morgan",
Discriminator = "Instructor",
};
person.HireInfo = new HireInfo()
{
HireDate = DateTime.Now
};
// Add the new person to the context.
context.People.Add(person);
// Insert a row into the Person table.
context.SaveChanges();
// Execute a query against the Person table.
// The query returns columns that map to the Person entity.
var existingPerson = context.People.FirstOrDefault();
// Execute a query against the Person table.
// The query returns columns that map to the Instructor entity.
var hireInfo = existingPerson.HireInfo;
Console.WriteLine("{0} was hired on {1}",
existingPerson.LastName, hireInfo.HireDate);
}
- Скомпилируйте и запустите приложение.
Следующие инструкции T-SQL были выполнены в базе данных School в результате выполнения этого приложения.
В результате выполнения контекста выполняется следующая вставка. SaveChanges() и объединяет данные из сущностей Person и HireInfo
В результате выполнения context.Люди выполняется следующая функция SELECT. FirstOrDefault() и выбирает только столбцы, сопоставленные с Person
Следующий параметр SELECT был выполнен в результате доступа к свойству навигации существующегоPerson.Instructor и выбирает только столбцы, сопоставленные с HireInfo.