Создание web-приложения ASP.NET MVC 3 + SQL Server 2008 Express + Code First

0

ASP.NET MVC 3

Сегодня я расскажу о своём опыте создания приложения на ASP.NET MVC 3. К приложению нужно прикрутить базу SQL Server 2008 Express. Структура базы данных будет создаваться при помощи подхода Code First. 

Думаю о  MVC 3 и так много написано, так что не буду тут ничего расписывать. Гугл в помощь. Про  SQL Server 2008 Express тоже думаю слышали. 

Code First — означат только то, как оно переводится — Сначала код. Сначала пишем код (классы), а фреймворк автоматически генерирует базу данных. 

Создадим простую базу данных по учёту вакансий. Над интерфейсом пока не будем заморачиваться. Чуть позже я покажу как прикрутить к такому приложению интерфейс сделанный на ExtJS 4.

Набросал примерную схему данных:

Схема базы данных 

Она описывает простое отношение один ко многим: «У одного работодателя может быть много вакансий».    

Перейдём к практике. Для работы нам понадобтся:

Всё это надо скачать и установить (если ещё не было установлено).

Запускаем Web Developer и создаём новый проект (Файл — Создать проект…).  Делаем всё как на рисунке и жмем ОК. 3 — имя вашего проекта.

Создание проекта 

Открывается окно:

New asp.net mvc 3 project 

Тут можно выбрать шаблон будущего приложения. Если выбрать 1 — Intranet Application, то создастся стандартный шаблон MVC 3 приложения с windows-аутентификацией. Internet Application содержит встроенный контроллер для аутентификации через веб-форму. 

Выберем Intranet Application, т.к. для нашей задачи аутентификация через формы не нужна.  

Также необходимо выбрать движок отображения. Мы будем использовать Razor — движок оптимизированный под генерацию HTML-кода. Подробнее тут.

Жмем ОК и ждём, пока наш проект создастся.

После создания обязательно обновите  EntityFramework (EF). Для этого в Package Managment Console (Вид — Другие окна —  Package Managment Console) вводим: install-package  EntityFramework. Для этой операции может потребоваться подключение к интернету.

Настроим соединение с базой данных. Работать будем с Microsoft SQL Server 2008 Express. Тут всё просто и одновременно сложно ;) Дело в том, что если не правильно задать строку подключения, то потом можно потратить очень много времени на отлов ошибок в коде, которые, на самом деле, являются следствием халатного отношения к этой строке.

Открываем файл Web.config и в разделе connectionStrings записываем следующие строки (предварительно удалив старые):

<add  name="ApplicationServices"<br />           connectionString="data source=.\SQLEXPRESS;Integrated Security=true;Initial Catalog=Storage;"<br />           providerName="System.Data.SqlClient" /><br /><add  name="AppContext"<br />          connectionString="data source=.\SQLEXPRESS;Integrated Security=true;Initial Catalog=Storage;"<br />          providerName="System.Data.SqlClient" />

Важно:  AppContext — должно совпадать с именем контекста (его мы создадим чуть позднее).

Тут у нас имеются две строки подключения: ApplicationServices и AppContext. Они отличаются только названием. 

В параметре «.\SQLEXPRESS» — точка (.) означает некий корень сервера БД, а  SQLEXPRESS — это экземпляр сервера, который у вас в данный момент работает.  При установке Express версии сервера имя экземпляра по умолчанию имеет значение  SQLEXPRESS. Если же вы ставите другую версию, что имя скорее всего будет MSSQLSERVER. При установке запомните имя экземпляра или уже после установки его можно посмотреть в среде SQL Server Management Studio.

Параметр  »Integrated Security=true » — включает Windows аутентификацию.

«Catalog=Storage» — указывает на названия файла БД (в данном случае это Storage).

Приступаем к созданию структуры базы данных — создаём классы.

В Обозревателе решений вызываем контекстное меню на папке Models. Выбираем «Добавить -> Класс…».

Добавляем класс в модель 

Вводим имя класса. В нашем случае это Vacancy.cs. Нажимаем Добавить.

Создание нового класса 

Создается пустой каркас класса Vacancy. В нем мы будем определять сущность Vacancies. В конечном итоге класс должен выглядеть следующим образом:

    public class Vacancy<br />    {<br />        public int VacancyId { get; set; }<br />        public string name { get; set; }<br />        public int EmployerID { get; set; } //для реализации отношения один ко многим (где много)<br />        public virtual Employer Employers { get; set; } //для реализации отношения один ко многим (где много)<br />        public double Salary { get; set; }<br />    }

Аналогично создадим класс Employer:

    public class Employer<br />    {<br />        public int EmployerId { get; set; }<br />        public string name { get; set; }<br />        public string adress { get; set; }<br />        public string contacts { get; set; }<br />        public string manager { get; set; }<br />        public virtual ICollection<Vacancy> Vacancies { get; set; } //для реализации отношения один ко многим (где один)<br />    }

Создадим класс контекста. Пусть он будет называться AppContext (не суть важно). Класс будет иметь вид:

using System.Data.Entity;<br />using MvcApplication7.Models;<br />namespace MVC3AppCodeFirst.Models<br />{<br />    public class AppContext : DbContext<br />    {<br />        public DbSet<Vacancy> Vacancies { get; set; }<br />        public DbSet<Employer> Employers { get; set; }<br />    }<br />}

На этом заканчивается описание нашей модели. Обязательно откомпилируем проект: «Отладка -> Построить…». Если не сделать построение проекта, то дальше ничего не будет работать (у меня по крайней мере не работало).

Переходим к созданию контроллеров. Контроллер отвечает за действия, которые предусматривает модель. В нашем случае это стандартные действия для работы с базой данных: Добавить, Удалить, Изменить и Показать.

Одновременно с контроллерами создадим и их представления — Views. Руками мы ничего писать не будем, всё сделаем при помощи дополнения  MVC 3 Tools Update, которое Вы надеюсь уже поставили.

Создадим контроллер и представления для модели Vacancy.cs.  В Обозревателе решений вызываем контекстное меню на папке Controllers. Выбираем «Добавить -> Controller…».

 

В открывшемся окне:

  • 1 — вводим имя нового контроллера (у нас пусть будет VacancyController)
  • 2 — означает, что будет созданы стандартные представления с использованием Entity Framework
  • 3 — выбираем модель, на основе которой генерировать контроллер и представления
  • 4 — выбираем контроллер контекста (в нашем случае это AppContext)
  • 5 — ну и про Razor я уже упоминал выше.

 Создание контроллера VacancyController

Нажимаем Add.  В случае возникновения ошибки, стоит попробовать убрать множественное число в именах классов Вашей модели (я их тут не использую) — могут возникнуть конфликты. К примеру, сначала я хотел создать класс Employers но у меня ничего не получилось и вылазила ошибка при генерации контроллера.

 Ошибка EntityFramework

Я просто переименовал класс в Employer и проблема исчезла. Так то ;)

Если всё прошло без ошибок, то немного подождём, пока EF не сгенерирует контроллер и представления. Аналогичным образом создадим класс Employer. 

Всё это в обозревателе решений должно выглядеть примерно так:

 Обозреватель решений после генерации представлений

Запустим наш проект (F5). Если всё нормально, то должно запуститься окно браузера с Вашим сайтом. Добавьте в адресную строку «/Vacancy». Должно получиться что то вроде: «http://localhost:53335/Vacancy». Нажмите Enter. Откроется страничка следующего вида:

Страница Vacancy 

Это можно сказать уже готовая к работе БД. Попробуйте создать пару записей. Потом откройте вместо  Vacancy поставте Employer и тоже чего-нибудь добавьте.

Важно: если у Вас уже до этого была создана база данных с именем Storage и она имеет другую структуру, то скорее всего появится ошибка. В этом случае просто смените имя новой БД в файле Web.config.

Важно: если Вы поменяли структуру базы данных (модель), то либо удалите старый файл БД либо поменяйте имя нового в  файле Web.config. Если этого не сделать, могут возникать ошибки (точнее они будут возникать 100%). Для решения данной проблемы можно применить Database Migration, но об этом позже.

Теперь создадим простейшую навигацию.

Откройте в обозревателе решений файл Views -> Home -> Index.cshtml. Разместим в нем две ссылки на страницы: » /Vacancy» и «/Employer». 

Для этого добавьте в конец следующие строки:

@Html.ActionLink("View Vacancies", "Index", "Vacancy")<br />@Html.ActionLink("View Employers", "Index", "Employer")

После запуска должно получиться следующее: 

Итоговое приложение 

Исходные коды проекта, который делал я — тут.

Ну, вот и всё, вроде бы ничего не упустил. Если что, пишите в комментариях. Удачи Вам с MVC3 и CodeFirst!

Метки:

Оставить комментарий

Перед отправкой формы:
Human test by Not Captcha