Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом пошаговом руководстве показано, как сопоставить тип сущности с двумя таблицами, изменив модель с помощью конструктора 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
- Вид —> Обозреватель серверов
- Щелкните правой кнопкой мыши Подключения к данным — Добавить подключение...
- Если вы не подключались к базе данных из Обозревателя серверов ранее, вам нужно выбрать Microsoft SQL Server в качестве источника данных.
- Подключитесь к LocalDB или SQL Express в зависимости от того, что у вас установлено
- Введите EntitySplitting в качестве имени базы данных
- Нажмите кнопку "ОК ", и вам будет предложено создать новую базу данных, нажмите кнопку "Да"
- Теперь новая база данных появится в обозревателе серверов
- Если вы используете Visual Studio 2012
- Щелкните правой кнопкой мыши базу данных в обозревателе серверов и выберите команду "Создать запрос"
- Скопируйте следующий SQL в новый запрос, а затем щелкните правой кнопкой мыши запрос и выберите "Выполнить".
- Если вы используете Visual Studio 2010
- Выберите Data -> редактор 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 .