Знакомство с Entity Framework Database — MVC Урок 3

Автор: | 16.02.2017

Первым делом давайте создадим проект.

Файл->Создать->Проект

И в открывшемся окне выберем тип проекта SQL SERVER->Проект базы данных SQL SERVER

В качестве имени проекта выберем ContosoUniversityData

Нажмем Ok.

В обозревателе решений щелкнем правой кнопкой и создадим таблицу как показано на рисунке ниже.

В открывшемся окне введем имя таблицы Student

Нажмем Добавить.

В окне Т-SQL добавим SQL запрос на создание структуры таблицы

CREATE TABLE [dbo].[Student] (
    [StudentID]      INT           IDENTITY (1, 1) NOT NULL,
    [LastName]       NVARCHAR (50) NULL,
    [FirstName]      NVARCHAR (50) NULL,
    [EnrollmentDate] DATETIME      NULL,
    PRIMARY KEY CLUSTERED ([StudentID] ASC)
)

Обратите внимание, что окно проектирование и T-SQL взаимно синхронизировались автоматически.

Аналогично добавим таблицы указанные ниже.

CREATE TABLE [dbo].[Course] (
    [CourseID] INT           IDENTITY (1, 1) NOT NULL,
    [Title]    NVARCHAR (50) NULL,
    [Credits]  INT           NULL,
    PRIMARY KEY CLUSTERED ([CourseID] ASC)
)

 

CREATE TABLE [dbo].[Enrollment] (
    [EnrollmentID] INT IDENTITY (1, 1) NOT NULL,
    [Grade]        DECIMAL(3, 2) NULL,
    [CourseID]     INT NOT NULL,
    [StudentID]    INT NOT NULL,
    PRIMARY KEY CLUSTERED ([EnrollmentID] ASC)
   
)

Добавим скрипт который выполнится после развертывания базы данных.

Оставим имя по умолчанию и добавим следующие запросы в него

MERGE INTO Course AS Target 
USING (VALUES 
        (1, 'Economics', 3), 
        (2, 'Literature', 3), 
        (3, 'Chemistry', 4)
) 
AS Source (CourseID, Title, Credits) 
ON Target.CourseID = Source.CourseID 
WHEN NOT MATCHED BY TARGET THEN 
INSERT (Title, Credits) 
VALUES (Title, Credits);

Этот скрипт добавит демо данные в таблицы.

Попробуем скомпилировать наш проект.

F5

В результате получаем ошибку

------ Сборка начата: проект: ContosoUniversityData, Конфигурация: Debug Any CPU ------
Не удалось выполнить отладку этого проекта, так как SQL Server не установлен на локальном компьютере. Задайте строку подключения отладки на странице свойств проекта.
Ошибка: Не удалось завершить операцию. Перетаскивание уже выполняется 
========== Сборка: успешно и без изменений: 0, с ошибками: 1, пропущено: 0 ==========
========== Развертывание: успешно: 0, с ошибками: 0, пропущено: 0 ==========

Для того чтобы исправить эту ошибку необходимо открыть меню Проект->Свойства

В открывшемся окне выбрать вкладку Отладка и нажать кнопку правка для строки целевого назначения

После чего выбрать название подключения с нашей базой данных

После этого поле строка целевого назначения будет заполнено.

Data Source=DESKTOP-K15S51F;Initial Catalog=ContosoUniversityData;Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True

Снова попробуем собрать наш проект F5

Теперь база данных создана вместе с таблицами и данными.

 

База данных создана. Переходим ко второму этапу.

Создадим новый проект MVC

В нашем проекте мы используем Entity Framework 6.1

Нам необходимо проверить его версию в NU Get управление решениями.

Откроем это окно и проверим версию Entity Framework

У нас все отлично.

Теперь нам нужно добавить модель для работы с базами данных.

В обозревателе решений правый клик по папке Models добавить новый элемент

В открывшемся окне выбираем ADO.NET EDM

Назовем файл

ContosoModel

Далее запускаем конструктор из базы данных нажимаем далее

Выбираем MS SQL Сервер

Выбираем сервер и базу данных

Проверяем подключение

Нажимаем Ок

Строка подключения создана

Выбираем все таблицы для создания модели

Теперь вы видите модели автоматически сгенерированные из базы данных

Добавление  шаблонных элементов в Controller.

Выбираем тип контроллера как на картинке

Заполняем данные как показано ниже

Теперь созданы классы. Если вы получили ошибку то нажмите F5 и повторите процесс

Создайте аналогичные контроллеры для остальных таблиц

Добавим ссылки в наш проект для открытия новых представлений сгенерированных мастером.

<div>
            @Html.ActionLink("List of students", "Index", "Students")<br />
            @Html.ActionLink("List of enrollments", "Index", "Enrollments")
            </div>

Добавим этот код в Index представление.

Проверим что все работает

Теперь вы можете управлять вашими таблицами из сгенерированных контроллеров и представлений