Подключение к базе данных

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

Чтобы хранить данные, нам естественным образом нужна база данных. Как правило, в качестве базы данных используется MS SQL Server, на примере которого мы и посмотрим весь процесс создания БД и подключения к ней.

Мы можем создать базу данных прямо в проекте, либо же создать ее на сервере MS SQL. Для хранения баз данных проекте у нас предназначена папка App_Data. Для этого нажмем правой кнопкой мыши на папку App_Data и в появившемся контекстном меню выберем Add-> New Item.... В появившемся окне добавления нового элемента выберем SQL Server Database и назовем новую базу данных Bookstore.mdf:

Мы можем создать базу данных равнозначным образом и на сервере. После этого база данных добавляется в проект, и мы можем увидеть ее в папке App_Data. Теперь в обозревателе баз данных (окно Database Explorer) мы можем подключиться к ней и создать таблицы, которые будут хранить данные.

Раскроем узел Bookstore.mdf и найдем узел Tables. Нажмем на этот узел правой кнопкой мыши и в появившемся меню выберем пункт Add New Table. И перед нами появится окно, в котором нам надо определить названия и типы столбцов новой таблицы. По соглашениям о наименованиях таблицы при работе с Entity Framework должны соответствовать имени модели. То есть, так как наша модель называется Book, то таблица будет называться Books. А Entity Framework автоматически распознает, что таблица Books соответствует классу Book.

Итак, создадим структуру таблицы:

Не забудьте установить ниже в окне Properties (в Visual Stidio 2010 - окно Column Properties) для столбца Id соответствующие параметры для первичного ключа:

После этого, если мы работаем с Visual Studio 2010, нам будет предложено просто ввести имя таблицы - введем имя Books, и затем таблица добавляется в БД.

А в Visual Studio Express 2012 for Web нам надо сгенерировать таблицу на основе заданного выше определения. Для этого нажмем на кнопку Update:

В появившемся диалоговом окне нажмем на кнопку Update Database. После этого в нашу базу данных добавляется только что сгенерированная таблица. Подобным образом определим таблицу Purchases для модели Purchase:

Добавим в таблицу Books несколько записей:

Теперь, во-первых, чтобы взаимодействовать с БД, нам нужен класс контекста данных, пусть это будет следующий класс BookContext:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace BookStore.Models
{
    public class BookContext : DbContext
	{
		public DbSet<Book> Books { get; set; }
		public DbSet<Purchase> Purchases { get; set; }
	}
}

Во-вторых, определим строку подключения к БД. Для этого откроем файл Web.config и добавим в конец секции configuration определение строки подключения. Однако тут надо сразу заметить, что для Visual Studio 2010 строка подключения будет отличаться от строки подключения, которая используется в Visual Studio 2012.

Итак, строка подключения для Visual Studio 2010 будет выглядеть так:

<configuration>
.........................
    <connectionStrings>
        <add name="BookContext" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename='|DataDirectory|\Bookstore.mdf';Integrated Security=True;User Instance=True"
 providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

Для Visual Studio 2012 будет выглядеть определение строки подключения будет выглядеть следующим образом:

<configuration>
.........................
    <connectionStrings>
        <add name="BookContext" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename='|DataDirectory|\Bookstore.mdf';Integrated Security=True"
 providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

В Visual Studio 2012 в отличие от 2010-й версии мы можем использовать режим LocalDB, который предназначен прежде всего для разработчиков, представляя некоторую упрощенную версию. Поэтому в данном случае в качестве источника данных используется (LocalDB)\v11.0.

Обратите внимание, что в обоих случаях свойство name="BookContext" должно содержать название контекста данных.

Использование подстановки |DataDirectory| позволяет опустить полный физический путь к базе данных, которая хранится в папке App_Data.

Теперь мы можем получить содержимое таблицы Books в контроллере Home:

public class HomeController : Controller
{
    BookContext db = new BookContext();

    public ActionResult Index()
    {
        return View(db.Books);
    }
}

И вывести данные в представлении Index.cshtml:

@model IEnumerable<BookStore.Models.Book>
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
    <div>
        <h3>Распродажа книг</h3>
        <table>
            <tr class="header"><td><p>Название книги</p></td>
                <td><p>Автор</p></td>
                <td><p>Цена</p></td><td></td>
            </tr>
            @foreach (BookStore.Models.Book b in Model)
            {
            <tr>
                <td><p>@b.Name</p></td>
                <td><p>@b.Author</p></td>
                <td><p>@b.Price</p></td>
                <td><p><a href="/Home/Buy/@b.Id">Купить</a></p></td>
            </tr>
            }
        </table>
    </div>

Закрытие подключения

Чтобы наверняка быть уверенным, что подключение к базе данных закрыто, следует вызывать метод Dispose у контекста данных:

protected override void Dispose(bool disposing)
{
    db.Dispose();
    base.Dispose(disposing);
}

Это переопределенная версия метода Dispose контроллера, которая вызывается при уничтожении объекта контроллера. В нее помещается вызов db.Dispose(), который уничтожает все связанные с контекстом данных ресурсы и подключения.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850