В данном посте
– Создание базы и таблицы в ней
– Подключение к данным при помощи EntityFramework (подход Code First)
– Вывод данных в представление
Создание БД и таблицы
Работаем с MS SQL и Management Studio. Открываем ее и подключаемся
При подключении у меня 2 опции
1 2 |
DESKTOP-T9U6IEP\SQLEXPRESS (localdb)\MSSQLLocalDB |
Первая – более менее полноценная как я понимаю SQLEXPRESS и вторая (localdb) – облегченная – для разработчиков, как я понимаю.
Строки подключения в Visual Studio к ним будут соответственно
для localdb
1 2 3 4 |
<connectionStrings> <add name ="DBConnection" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=userstore.mdf;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False; " providerName="System.Data.SqlClient" /> </connectionStrings> |
1 2 3 4 |
<connectionStrings> <add name="BookContext" connectionString="Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename='|DataDirectory|\Bookstore.mdf';Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> |
для SQLEXPRESS
1 2 3 4 |
<connectionStrings> <add name="BookContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Bookstore;Integrated Security=True" providerName="System.Data.SqlClient"/> </connectionStrings> |
или
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<connectionStrings> <add name ="DBConnection" connectionString=" Data Source=DESKTOP-T9U6IEP\SQLEXPRESS; Initial Catalog=userstore.mdf; Integrated Security=True; Connect Timeout=15; Encrypt=False; TrustServerCertificate=True; ApplicationIntent=ReadWrite; MultiSubnetFailover=False; " providerName="System.Data.SqlClient" /> </connectionStrings> |
Итак, выберем SQLEXPRESS и создадим в ней базу
Правой кнопкой мыши на Базы данных – > Создать базу данных
Раскроем ее и в таблицах добавим нашу первую таблицу Books и 4 поля как на картинке снизу
Далее изменим поле Id на автоинкрементное и сделаем это поле первичным ключом
И сохраним наши изменения. Теперь заполним нашу таблицу какими-нибудь данными. Для этого, нажмем на Таблицы – > Обновить. Далее, на нашей таблице – dbo.Books – выберем изменить первые 200 строк.
Далее, заполним некоторыми данными
И выполним код SQL, нажав на правую кнопку мыши на таблице
Всё, теперь данные у нас в таблице.
Подключение к данным из VisualStudio – подход CodeFirst
Сначала создадим модель
Book.cs
1 2 3 4 5 6 7 |
public class Book { public int Id { get; set; } public string Name { get; set; } public string Author { get; set; } public int Price { get; set; } } |
Теперь через NuGet добавим EntityFramework
Проинсталлируем его в нужный нам проект
Теперь создадим контекст – связь с базой данных
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; namespace modelsTraining2.Models { public class BookContext : DbContext { public BookContext() : base("DbConnection") { } public DbSet<Book> Books { get; set; } } } |
Поскольку данные в базе у нас уже есть и нам нужно, чтобы контекст подхватил их, нужно выполнить следующие правила
– Имя класса контекста и имя соединения в строке соединения должны быть одинаковыми, например, BookContext в обоих случаях. То есть
<add name=”BookContext”… в строке подключения и название класса BookContext
-Либо нужно прямо указать контексту – какое соединения нам использовать
1 |
public BookContext() : base("DbConnection"){ } |
Если не выполнить этих требований – данные не будут загружаться.
Строка подключения
1 2 3 4 |
<connectionStrings> <add name="DbConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Bookstore;Integrated Security=True" providerName="System.Data.SqlClient"/> </connectionStrings> |
Контроллер
Создадим простейший контроллер, возвращающий представление View
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using modelsTraining2.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace modelsTraining2.Controllers { public class BookController : Controller { public ActionResult Show() { BookContext db = new BookContext(); return View(db.Books); } } } |
И теперь нажмем правой кнопкой на слове Show и добавим типизированное представление
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
@model IEnumerable<modelsTraining2.Models.Book> @{ ViewBag.Title = "Show"; } <h2>Show</h2> <p> @Html.ActionLink("Create New", "Create") </p> <table class="table"> <tr> <th> @Html.DisplayNameFor(model => model.Name) </th> <th> @Html.DisplayNameFor(model => model.Author) </th> <th> @Html.DisplayNameFor(model => model.Price) </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Name) </td> <td> @Html.DisplayFor(modelItem => item.Author) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.ActionLink("Edit", "Edit", new { id=item.Id }) | @Html.ActionLink("Details", "Details", new { id=item.Id }) | @Html.ActionLink("Delete", "Delete", new { id=item.Id }) </td> </tr> } </table> |
Запустим приложение и посмотрим на результат
Теперь изменим в контроллере выборку таким образом, добавив условие Where
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using modelsTraining2.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace modelsTraining2.Controllers { public class BookController : Controller { public ActionResult Show() { BookContext db = new BookContext(); return View(db.Books.Where(b=>(b.Price<=13)).Where(b=>b.Author.Contains("Лев"))); } } } |