Разделение сущностей конструктора
В этом пошаговом руководстве показано, как сопоставить тип сущности с двумя таблицами, изменив модель с помощью конструктора Entity Framework (конструктор EF). Сущность можно сопоставить с несколькими таблицами, если в таблицах имеется общий ключ. Основные понятия, применяемые к сопоставлению типа сущности с двумя таблицами, легко расширяются для сопоставления типа сущности с более чем двумя таблицами.
На следующем рисунке показаны основные окна, которые используются при работе с конструктором EF.
Необходимые компоненты
Visual Studio 2012 или Visual Studio 2010, Ultimate, Premium, Professional или Web Express edition.
Создание базы данных
Сервер базы данных, установленный с Visual Studio, отличается в зависимости от установленной версии Visual Studio:
- Если вы используете Visual Studio 2012, вы создадите базу данных LocalDB.
- Если вы используете Visual Studio 2010, вы создадите базу данных SQL Express.
Сначала мы создадим базу данных с двумя таблицами, которые мы собираемся объединить в одну сущность.
- Запустите Visual Studio
- Представление —> Обозреватель сервера
- Щелкните правой кнопкой мыши данные Подключение ions—> добавьте Подключение ion...
- Если вы еще не подключились к базе данных из сервера Обозреватель, прежде чем выбрать Microsoft SQL Server в качестве источника данных
- Подключение в LocalDB или SQL Express в зависимости от установленного экземпляра
- Введите EntitySplitting в качестве имени базы данных
- Нажмите кнопку "ОК ", и вам будет предложено создать новую базу данных, нажмите кнопку "Да"
- Теперь новая база данных появится в сервере Обозреватель
- Если вы используете Visual Studio 2012
- Щелкните правой кнопкой мыши базу данных на сервере Обозреватель и выберите "Создать запрос"
- Скопируйте следующий SQL в новый запрос, а затем щелкните правой кнопкой мыши запрос и выберите "Выполнить".
- Если вы используете Visual Studio 2010
- Выбор данных —> редактор Transact SQL —> создание Подключение запроса...
- Введите .\SQLEXPRESS в качестве имени сервера и нажмите кнопку "ОК"
- Выберите базу данных EntitySplitting в раскрывающемся списке в верхней части редактора запросов.
- Скопируйте следующий SQL в новый запрос, а затем щелкните правой кнопкой мыши запрос и выберите "Выполнить SQL"
CREATE TABLE [dbo].[Person] (
[PersonId] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR (200) NULL,
[LastName] NVARCHAR (200) NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonId] ASC)
);
CREATE TABLE [dbo].[PersonInfo] (
[PersonId] INT NOT NULL,
[Email] NVARCHAR (200) NULL,
[Phone] NVARCHAR (50) NULL,
CONSTRAINT [PK_PersonInfo] PRIMARY KEY CLUSTERED ([PersonId] ASC),
CONSTRAINT [FK_Person_PersonInfo] FOREIGN KEY ([PersonId]) REFERENCES [dbo].[Person] ([PersonId]) ON DELETE CASCADE
);
Создание проекта
- В меню Файл укажите Создать, затем нажмите Проект.
- В левой области щелкните Visual C#, а затем выберите шаблон консольного приложения .
- Введите MapEntityToTablesSample в качестве имени проекта и нажмите кнопку "ОК".
- Нажмите кнопку "Нет" , если появится запрос SQL, созданный в первом разделе.
Создание модели на основе базы данных
- Щелкните правой кнопкой мыши имя проекта в Обозреватель решений, выберите пункт "Добавить" и выберите пункт "Создать элемент".
- Выберите данные из меню слева и выберите ADO.NET модель данных сущности в области шаблонов.
- Введите MapEntityToTablesModel.edmx для имени файла и нажмите кнопку "Добавить".
- В диалоговом окне "Выбор содержимого модели" выберите "Создать из базы данных" и нажмите кнопку "Далее".
- Выберите подключение EntitySplitting в раскрывающемся списке и нажмите кнопку "Далее".
- В диалоговом окне "Выбор объектов базы данных" проверка поле рядом с узлом таблиц. При этом в модель будут добавлены все таблицы из базы данных EntitySplitting .
- Нажмите кнопку Готово.
Отображается конструктор сущностей, предоставляющий область конструктора для редактирования модели.
Сопоставление сущности с двумя таблицами
На этом шаге мы обновим тип сущности Person , чтобы объединить данные из таблиц Person и PersonInfo .
Выберите свойства электронной почты и Телефон сущности **PersonInfo **, а затем нажмите клавиши CTRL+X.
Выберите сущность **Person *** и нажмите клавиши CTRL+V .
В области конструктора выберите сущность PersonInfo и нажмите кнопку "Удалить " на клавиатуре.
Нажмите кнопку "Нет" , если вы хотите удалить таблицу PersonInfo из модели, мы готовы сопоставить ее с сущностью Person .
Для следующих действий требуется окно сведений о сопоставлении. Если вы не видите это окно, щелкните правой кнопкой мыши область конструктора и выберите пункт "Сведения о сопоставлении".
- Выберите тип сущности Person и нажмите кнопку< "Добавить таблицу или представление>" в окне сведений о сопоставлении.
- Выберите **PersonInfo ** в раскрывающемся списке. Окно сведений о сопоставлении обновляется с помощью сопоставлений столбцов по умолчанию, они хорошо соответствуют нашему сценарию.
Теперь тип сущности Person сопоставляется с таблицами Person и PersonInfo .
Использование модели
- Вставьте следующий код в метод Main.
using (var context = new EntitySplittingEntities())
{
var person = new Person
{
FirstName = "John",
LastName = "Doe",
Email = "john@example.com",
Phone = "555-555-5555"
};
context.People.Add(person);
context.SaveChanges();
foreach (var item in context.People)
{
Console.WriteLine(item.FirstName);
}
}
- Скомпилируйте и запустите приложение.
Следующие инструкции T-SQL были выполнены в базе данных в результате выполнения этого приложения.
Следующие две инструкции INSERT были выполнены в результате выполнения контекста. SaveChanges(). Они принимают данные из сущности Person и разделяют их между таблицами Person и PersonInfo.
В результате перечисления людей в базе данных выполняется следующая функция SELECT . Он объединяет данные из таблицы Person и PersonInfo .