Как добавить базу данных в visual studio asp net

Обновлено: 06.07.2024

СУБД прошли долгий путь развития. В начале все данные хранили в простых(плоских) файлах. По мере увеличения объемов данных встал вопрос о том, как получить быстрый доступ к нужной информации. Для этого данные стали индексироваться. Другой вопрос – как избежать дублирования – когда одни и те же данные хранятся в разных местах. Чтобы ее решить, была разработана теория нормализации баз данных. Сегодня мощная промышленная СУБД немыслима без систем защиты информации, журналирования, транзакций и хранимых процедур.

Данные в СУБД хранятся в таблицах. Таблица состоит из полей и записей. Запись – единица хранения данных, строка таблицы. Например, в одной записи хранятся сведения об одном человеке. Поля – это столбцы таблицы для хранения конкретного вида информации. Базы данных называются реляционными, потому что таблицы в них связаны определенным образом.

Представления(View) создаются на основе одной или нескольких таблиц с помощью фильтрации, объединения, сортировки и группирования.

Для наглядности рассмотрим эти понятия на примере. В свое время я работала с базой данных кадров одного предприятия. Как создать такую базу? Прежде всего нам нужна таблица для хранения данных о сотрудниках.

ID Имя Фамилия Отчество Дата рождения Дата приема Должность
1 Петр Васечкин Иванович 1965 2001 Завхоз
2 Василий Петров Сидорович 1977 2003 Программист


и так далее. Таблица может иметь тысячи записей.

Отделу кадров нужна информация о перемещениях сотрудников. Для этого заведена отдельная таблица. Например, Петров получил должность старшего программиста. Прежде всего надо заметить, что названий должностей ограниченное количество. Чтобы избежать дублирования, лучше их хранить в отдельной таблице.

ID Название должности Минимальный оклад
1 Директор 1
2 Завхоз 10
3 Программист 20
4 Уборщица 100 ID Сотрудник Должность Назначение Дата
1235 123 10 11 20.06.06


Таблица «Должности» связана как с таблицей сотрудников, так и с таблицей перемещений по своему уникальному ключу. База данных может генерировать первичные ключи сама, автоматически добавляя значения к предыдущему значению ключа. Это называется автоинкрементированием. Для полной уверенности в уникальности данных в таблицах могут держать точное время создания записи(Timestamp) и GUI(глобальный уникальный идентификатор).

Этот процесс называется нормализацией. Чтобы для отчета восстановить информацию о перемещении, в запросе нужно связать данные из разных таблиц.

В результате этого запроса будет создано представление, которое покажет данные из взаимосвязанных таблиц в удобной для чтения форме:

Множество таблиц данных, связанных отношениями, составляют базу данных. На сервере СУБД может храниться множество баз данных.

Подробнее о теории баз данных можно прочитать в других курсах. Перейдем к конкретным примерам связывания с базами данных на веб-страницах.

У каждого пользователя Windows наверняка имеется программа Access. Это однопользовательская СУБД, в которой модель безопасности не так сильна. В одном файле Access хранятся как данные, так и интерфейс в виде форм и отчетов. Можно создавать модули на VBA (Visual Basic for Application). Профессиональные разработчики пользуются более мощными программами. По «серьезности» СУБД от Microsoft идут в порядке – Access – FoxPro – MS SQL. MS SQL не позволяет создавать формы, а занимается хранением и защитой данных на профессиональном уровне. Visual Studio 2005 (и VWD) при инсталляции устанавливает MS SQL Express. Он будет запускаться автоматически в виде сервиса Windows.

Для работы с базами данных используется язык структурированных запросов – SQL (Structured Query Language). Команды этого языка называются запросами. Запросы служат для получения данных, для создания и изменения структуры таблиц, добавления, удаления и обновления записей и многого другого. Последовательность команд может храниться прямо на сервере СУБД в виде хранимой процедуры. Нужно стараться всегда пользоваться хранимыми процедурами, а не писать команды самим. Главное их преимущество – скорость работы и инкапсуляция бизнес-логики. Хранятся они на сервере в уже откомпилированном виде, в то время как простой переданный набор команд SQL проходит через стадию компиляции.

Для конфигурирования источников данных на вашем компьютере зайдите в Control Panel, Administrative Tools, Data Sources(ODBC).

Мы видим, что ODBC при наличии нужного драйвера позволяет связываться с различными базами данных – Access, FoxPro, Oracle, Microsoft SQL, MySQL, SAP, DB2. Если в файле Excel создать именованную таблицу, ODBC способен ее распознать и работать как с таблицей базы данных.

В System.Data.OleDb находятся классы, позволяющие работать с источниками данных OleDb, в том числе с MS SQL версии 6.0 и ниже. Там находятся такие классы, как OleDbConnection, OleDbDataAdapter и OleDbCommand.

System.Data.SqlClient. Здесь определен провайдер данных для СУБД SQL Server версии 7.0 и выше. Содержатся классы SqlConnection, SqlTransaction, SqlCommand и другие.

В System.Data.SqlTypes находятся классы, представляющие типы данных СУБД SQL Server.

1. Вначале создается соединение с базой данных – класс Connection, который обеспечивается необходимой информацией – строкой соединения.
2. Создается объект Command и задается команда, которую необходимо выполнить в данной СУБД. Эта команда может быть запросом SQL или исполняемой процедурой. Нужно задать параметры этой команды, если они имеются.
3. Если команда не возвращает данных, она просто выполняется с помощью одного из методов Execute. Например, это может быть удаление или обновление данных таблицы.
4. Если команда возвращает выборку данных, их необходимо куда-то поместить. Решите, нужно ли вам получить данные для последующего использования без связи с базой данных или же нужно просто быстро выполнить команду. В первом случае нужно создать класс DataAdapter и с его помощью сохранить данные в DataSet или в DataTable. Во втором случае создается класс DataReader, который требует сохранять соединение на все время работы, хранит выборку только для чтения и позволяет двигаться только вперед. Зато чтение с помощью DataReader выполняется в несколько раз быстрее, чем в DataAdapter.
5. Задать полученный DataSet или DataReader как источник данных элемента управления или вывести их на страницу другим способом.

Объект Connection для соединения с базой данных нуждается в строке соединения для указания пути к СУБД и входа в систему. Свойства класса Connection показаны в таблице. OleDbConnection, SqlConnection, OdbcConnection – наследники класса Connection, специфические для провайдеров OleDb, MS SQL ODBC соответственно.
Свойство Описание
DataSource Путь к базе данных в файловой системе при использовании Oledb, имя экземпляра базы сервера при использовании SqlConnection
Database Возвращает имя базы данных, используемой в объекте Connection после открытия
State Возвращает текущее состояние соединения. Возможные значения – Broken, Closed, Connecting, Executing, Fetching и Open.
ConnectionString Строка соединения с СУБД

Все свойства, кроме ConnectionString, только для чтения.
Использование объекта Command

Объект Command исполняет запрос SQL, который может быть в форме встроенного текста, процедуры сервера или прямого доступа к таблице. Если это запрос на выборку данных SELECT, то данные обычно помещаются в DataSet или в DataReader. Методы и свойства определены в абстрактном классе DbCommand(через интерфейс IDbCommand), и их реализуют частные ненаследуемые классы OleDbCommand, SqlCommand, OdbcCommand.

Свойство CommandType может принимать значения из перечисления CommandType. По умолчанию это Text, то есть выполняется непосредственно текст команды SQL, который записан в свойстве Command. TableDirect означает, что в результате выполнения команды будет возвращено все содержание таблицы. StoredProcedure означает, что в Command находится имя процедуры сервера, которая и будет выполняться.

Свойство CommandText хранит текст запроса SQL или имя серверной процедуры.

CommandTimeout задает время ожидания ответа, по умолчанию равное 30 секунд. Если команда не выполнится в течение этого времени, будет выброшено исключение.

Процедуры сервера нуждаются в параметрах. Они хранятся в коллекции Parameters и имеют тип SqlParameter. Текстовые команды также могут получать параметры, перед которыми ставится префикс @. Например:

Часто используется метод ExecuteNonQuery. С помощью него можно выполнить любую операцию с базами данных, которая не связана с запросом и получением данных, как то обновление, удаление записей, создание и изменение таблиц, создание процедур сервера. Она возвращает количество измененных записей в том случае, если выполняются команды Select, Update, Delete.

ExecuteScalar возвращает результат запроса в случае, если это одно-единственное значение. Например, нужно узнать количество заказов конкретного покупателя. Запрос выполняется с помощью команды “Select count * where customerid=1”. Ее результат – выборка из одной строки и одного столбца. Ее можно выполнить и с помощью метода ExecuteReader, но ExecuteScalar будет выполняться быстрее. Если запрос возвратит большее количество строк или столбцов, они будут проигнорированы.

ExecuteRow возвращает единственную запись.

ExecuteReader выполняется, если нужно получить табличные данные. Результат выполнения – курсор, в котором можно двигаться только от начала до конца.

В результате выполнения метода ExecuteReader объекта Command создается объект DataReader. Всегда закрывайте соединения после использования, иначе оно останется активным и будет занимать ресурсы. Это можно сделать двумя способами. Первый – вызвать перегруженный метод ExecuteReader, который принимает параметр типа CommandBehavior со значением CommandBehavior.CloseConnection. В таком случае необходимо перелистать полученную выборку от начала до конца, и соединение закроется, когда будет достигнут конец. Если вы не хотите прочитать все данные, можете самостоятельно закрыть соединение методом Close.

Развитые СУБД (теперь и MS Access) поддерживают транзакции. Транзакция – это последовательность команд, которая выполняется как одно целое. Например, при переводе денег сумма вычитается с одного счета и добавляется к другому. Если произойдет только одна из этих операций, банк или его клиенты понесут потери. поэтому важно, чтобы произошли обе операции или бы ни одна не произошла. Если на одном из этапов транзакции произошла ошибка, происходит откат(Rollback), то есть отменяются все ранее сделанные операции и база возвращается к состоянию до начала транзакции. Если все успешно, транзакция подтверждается операцией Commit.

Для поддержки транзакций введен класс SqlTransaction и ему подобные. У объекта Command есть свойство Transaction. Метод BeginTransaction объекта Connection заставляет базу данных перейти в режим транзакции.

Кроме того, необходимо всегда заключать программный код, работающий с базами данных, в блоки try/catch, так как работа часто происходит с удаленными серверами, и могут происходить самые разные ошибки как в сети. так и при работе самого сервера.

При этом выбрасывается исключение SqlException или OleDbException.

DbDataAdapter является родительским классом для SqlDataAdapter, OleDbDataAdapter, OdbcDataAdapter. Этот класс содержит 4 объекта типа Command. Классы DataAdapter обеспечивают двусторонний обмен информацией.

* SelectCommand – эта команда используется для выборки данных из базы. При этом класс DataTable заполняется данными.
* UpdateCommand – обновляет данные(редактирование записей).
* InsertCommand – добавление новых записей
* InsertCommand – команда для удаления записей

Метод Fill класса DbDataAdapter заполняет объекты DataSet или DataTable данными, прочитанными в результате выполнения команды SelectCommand. Эта команда должна быть запросом SQL типа Select. Если таблицы уже существуют, в него добавляются новые таблицы. Вообще метод Fill перегружен 8 раз. Например, DbDataAdapter.Fill Method (DataSet, String) добавляет в DataSet таблицу с именем, указанным во втором параметре. Если такая таблица уже есть, она обновляется. Доступ к таблице можно получить с помощью его имени индексатором.

Метод DbDataAdapter.Update записывает в базу данных все изменения, которые произошли в связанном с ним объекте DataSet.
DataSet

DataSet – это класс, содержащий в себе одну или несколько таблиц DataTable и связи между ними. Класс DataSet – это представление в памяти информации, считанной через ADO из баз данных или XML. Он позволяет манипулировать данными после отключения от источника данных.

Коллекция таблиц хранится в свойстве Tables, а отношений – в свойстве Relations.

Основываясь на таблицах датасета, можно создавать представления – DataView.

Напишем страницу, в которой будут использоваться представленные классы.

База Northwind входит в комплект SDK. Ее можно установить на сервере, запустив командную строку SQLExpress.

Окно внешних источников данных.


Соединение можно установить как с MS SQL, так и с файлом Access и любым источником ODBC, а также Oracle. Можно также создать новую базу данных MS SQL.


Когда соединение создано, вы через пользовательский интерфейс можете добавлять таблицы, просматривать их содержание, писать процедуры сервера и многое другое.

В лекции 3 мы создали страницы с голосованиями, но никак не обрабатывали результаты. Сейчас мы будем сохранять результаты голосования.

1. В начале надо создать базу данных. В окне Server Exlorer нажмите правой клавишей мыши на пункт Data Connections, в контекстном меню выберите Create New Sql Database.


.SQLExpress равносильно (local) SQLExpress и означает сервер на локальной машине. Можно подключиться к серверу и по сети. Мы создали базу данных Polls, которая находится на сервере. Можно создать базу данных в отдельном файле .mdf, тогда ее можно будет переносить на другой компьютер.

2. Создание таблицы. Это можно сделать и программно, и через окно Server Exlorer. Там уже появился узел созданной базы Polls.dbo. Раскройте его, правой клавишей мыши кликните на пункт Tables, в контекстном меню выберите Add New Table. Заполните следующие значения.
Column Name Data Type Allow Nulls
id int +
variant nvarchar(100)
voices int

Поле id создается как уникальный идентификатор варианта, и оно должно быть первичным ключом таблицы. Кликните мышью на первой строке и выберите пункт Set Primary Key. Поле voices(количество голосов) при создании должно быть равно 0. В Columns Properties найдите строчку Default Value or Binding и впишите значение 0.

Создание той же самой таблицы в программном режиме:

3. Заполнение таблицы вариантами. Кликните мышью на таблице и выберите пункт Show Table Data. Значения id не должны повторяться.


4. Создание серверной процедуры. При каждом голосовании значение поля voices одной из записей таблицы, соответствующей нужному пункту, должно возрастать. Это удобнее сделать с помощью процедуры, которая принимает аргумент id и обновляет нужное поле. Кликните мышью на узел Stored Procedures и выберите пункт Add New Stored Procedure.

В этой процедуре заключены 2 взаимосвязанных команды, связанных общей логикой, а для выполнения ее понадобится только один объект Command. Также заметьте, что для ее вызова не нужно знать внутреннее устройство таблицы. Перед переменными процедуры и параметрами ставится @, чтобы отличить их от полей таблицы.

Оператор SELECT извлекает записи из таблицы poll, которые соответствуют условию после ключевого слова WHERE. Так как id – ключевое(уникальное) поле и выбирается одно поле voices, возвращается одно значение, которое можно записать в переменную. Затем в операторе UPDATE изменяется на увеличенное значение переменной @Count.

5. Привязка к данным. На новой странице создайте элементы Button и RadioButtonList(можно и CheckBoxList) перетаскиванием из Toolbox. На RadioButtonList имеется стрелка, открывающая Smart Tag. С помощью него можно сконфигурировать соединение с нужной таблицей или внести значения вручную. При нажатии на Configure Data Source появится мастер соединений. Выберите New Data Source. На втором шаге мастер предложит выбрать тип источника. Выберите Database. На следующем шаге из выпадающего списка выберите .sqlexpress.Polls.dbo. На четвертом шаге мастер предложит сохранить строку соединения в конфигурационном файле. Сохраним, она может понадобиться. Для заполнения переключателей необходимы 2 поля – в variant содержится текст варианта, который будет виден в форме, а id – номер варианта, который связан с DataValueField списка переключателей, и будет передаваться в процедуру сервера как параметр.


При желании на этом шаге можно отсортировать значения, например, по алфавитному порядку текстов нажатием на кнопку ORDER BY. На предпоследнем шаге можно протестировать полученный запрос, если все в порядке, то на последнем шаге ставим variant как источник для показа и id для значений. На странице должно получиться примерно следующее:

6. Обработка результатов. Процедуру необходимо вызвать с параметром, взятым из свойства Value группы переключателей. Свойство Parameters SqlCommand является коллекцией, в данном случае в нее надо добавить один элемент.

При работе с базами данных важно соблюдать принцип: «занимай ресурсы как можно позже и освобождай как можно раньше». Поэтому соединение закрывается сразу после выполнения процедуры сервера.
Заключение

Visual Studio можно использовать для создания и обновления файла локальной базы данных в SQL Server Express LocalDB. можно также создать базу данных, выполнив инструкции Transact-SQL в окне инструментов обозревателя объектов SQL Server в Visual Studio. В этом разделе мы создадим MDF файл и добавим таблицы и ключи с помощью Конструктор таблиц.

Предварительные требования

Создание проекта и файла локальной базы данных

в строке меню выберите Project > добавить новый элемент.

В списке шаблонов элементов прокрутите вниз и выберите база данных на основе службы.

Добавление нового элемента > базы данных на основе службы

Добавление нового элемента > базы данных на основе службы

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

Добавление источника данных

если окно источники данных не открыто, откройте его, нажав клавиши Shift + Alt + D или выбрав просмотреть > другие Windows > источники данных в строке меню.

В окне Источники данных выберите Добавить новый источник данных.

Добавить новый источник данных в Visual Studio

Добавить новый источник данных в Visual Studio

Откроется Мастер настройки источника данных .

На странице Выбор типа источника данных выберите база данных , а затем нажмите кнопку Далее.

На странице Выбор модели базы данных нажмите кнопку Далее , чтобы принять значение по умолчанию (набор данных).

На странице Выбор подключения к данным выберите файл сампледатабасе. mdf в раскрывающемся списке и нажмите кнопку Далее.

На странице сохранить строку подключения в файле конфигурации приложения нажмите кнопку Далее.

Просмотр свойств подключения к данным

Чтобы просмотреть строку подключения для файла сампледатабасе. mdf , откройте окно свойств подключения к данным:

выберите вид > SQL Server обозревателе объектов , чтобы открыть окно обозревателя объектов SQL Server . Разверните узел (LocalDB) \MSSQLLocalDB > базы данных, а затем щелкните правой кнопкой мыши сампледатабасе. mdf и выберите пункт Свойства.

Кроме того, можно выбрать пункт Просмотреть > Обозреватель сервера, если это окно еще не открыто. Откройте окно свойств, развернув узел подключения к данным , щелкнув правой кнопкой мыши сампледатабасе. mdf и выбрав пункт Свойства.

если не удается развернуть узел подключения к данным или отсутствует подключение сампледатабасе. mdf, нажмите кнопку Подключение к базе данных на панели инструментов обозреватель сервера. в диалоговом окне добавление соединения убедитесь, что в поле источник данных выбран Microsoft SQL Server файл базы данных , а затем найдите и выберите файл сампледатабасе. mdf. Завершите добавление подключения, нажав кнопку ОК.

Создание таблиц и ключей с помощью конструктор таблиц

В этом разделе вы создадите две таблицы, первичный ключ в каждой таблице и несколько строк образца данных. Вы также создадите внешний ключ, чтобы указать, как записи в одной таблице соответствуют записям в другой таблице.

Создание таблицы Customers

В Обозреватель сервера разверните узел подключения к данным , а затем узел сампледатабасе. mdf .

если не удается развернуть узел подключения к данным или отсутствует подключение сампледатабасе. mdf, нажмите кнопку Подключение к базе данных на панели инструментов обозреватель сервера. в диалоговом окне добавление соединения убедитесь, что в поле источник данных выбран Microsoft SQL Server файл базы данных , а затем найдите и выберите файл сампледатабасе. mdf. Завершите добавление подключения, нажав кнопку ОК.

Щелкните правой кнопкой мыши таблицы и выберите команду Добавить новую таблицу.

Будет открыт Конструктор таблиц, отобразится сетка с одной строкой по умолчанию, которая представляет один столбец в создаваемой таблице. Путем добавления строк в сетку будут добавлены столбцы в таблицу.

В сетке добавьте строку для каждой из следующих записей.

Щелкните строку правой кнопкой мыши CustomerID и выберите пункт Задать первичный ключ.

Щелкните строку по умолчанию () правой кнопкой мыши Id и выберите пункт Удалить.

Назовите таблицу "Клиенты" путем обновления первой строки в области скриптов, как показано в следующем примере:

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

конструктор таблиц с таблицей Customers

конструктор таблиц с таблицей Customers

В левом верхнем углу Конструктор таблиц выберите Обновить или нажмите клавиши SHIFT + ALT + U.

В диалоговом окне Предварительный просмотр обновлений базы данных выберите обновить базу данных.

Таблица Customers создается в файле локальной базы данных.

Создание таблицы Orders

Создайте еще одну таблицу, а затем добавьте строку для каждой записи следующей таблицы.

Задайте OrderID в качестве первичного ключа, а затем удалите строку по умолчанию.

Назовите таблицу "Заказы" путем обновления первой строки в области скриптов, как показано в следующем примере:

В левом верхнем углу Конструктор таблиц выберите Обновить или нажмите клавиши SHIFT + ALT + U.

В диалоговом окне Предварительный просмотр обновлений базы данных выберите обновить базу данных.

Таблица Orders создается в файле локальной базы данных. Если развернуть узел таблицы в обозреватель сервера, отобразятся две таблицы:

Узел таблиц, развернутый в обозреватель сервера

Узел таблиц, развернутый в обозреватель сервера

Если вы не видите его, нажмите кнопку Обновить на панели инструментов.

Создание внешнего ключа

В контекстной области в правой части сетки конструктор таблиц для таблицы Orders щелкните правой кнопкой мыши внешние ключи и выберите Добавить новый внешний ключ.

Добавление внешнего ключа в конструктор таблиц в Visual Studio

В появившемся текстовом поле замените текст ToTable на Customers.

в области T-SQL обновите последнюю строку, чтобы она соответствовала следующему примеру:

В левом верхнем углу Конструктор таблиц выберите Обновить (SHIFT + ALT + U).

В диалоговом окне Предварительный просмотр обновлений базы данных выберите обновить базу данных.

Создается внешний ключ.

Заполнение таблиц данными

в обозреватель сервера или SQL Server обозревателе объектов разверните узел образца базы данных.

Откройте контекстное меню для узла таблицы , выберите Обновить, а затем разверните узел таблицы .

Откройте контекстное меню таблицы Customers и выберите Просмотреть данные.

Добавьте необходимые данные для некоторых клиентов.

Можно указать любые пять символов как ИД клиентов, но хотя бы один нужно выбрать и запомнить для дальнейшего использования в этой процедуре.

Откройте контекстное меню таблицы Orders и выберите пункт отобразить данные таблицы.

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

Убедитесь, что все идентификаторы заказов и количества заказов — целые числа, и каждый идентификатор клиента соответствует значению, указанному в столбце CustomerID таблицы клиентов.

Поздравляем! Теперь вы умеете создавать таблицы, связывать их с внешним ключом и добавлять данные.

Обзор

В этом руководстве показано, как подготовить проект к развертыванию базы данных. Структура базы данных и некоторые (не все) данные в двух базах данных приложения должны быть развернуты в тестовой, промежуточной и рабочей средах.

Как правило, при разработке приложения необходимо ввести тестовые данные в базу данных, которую не нужно развертывать на активном сайте. Однако у вас также могут быть некоторые рабочие данные, которые необходимо развернуть. В этом учебнике вы настроите проект университета Contoso и подготовите скрипты SQL, чтобы при развертывании были добавлены правильные данные.

SQL Server Express LocalDB

В примере приложения используется SQL Server Express LocalDB. SQL Server Express — это бесплатный выпуск SQL Server. Он обычно используется во время разработки, поскольку он основан на том же ядре СУБД, что и полные версии SQL Server. Можно протестировать SQL Server Express и быть уверенным в том, что приложение будет вести себя одинаково в рабочей среде с несколькими исключениями для функций, которые отличаются в разных выпусках SQL Server.

LocalDB — это специальный режим выполнения SQL Server Express, который позволяет работать с базами данных в виде MDF -файлов. Как правило, файлы базы данных LocalDB хранятся в папке приложения_данных веб-проекта. Функция пользовательского экземпляра в SQL Server Express также позволяет работать с MDF -файлами, но функция пользовательского экземпляра является устаревшей. Поэтому для работы с MDF -файлами рекомендуется использовать LocalDB.

Обычно SQL Server Express не используется для рабочих веб-приложений. LocalDB в частности не рекомендуется для использования в рабочей среде с веб-приложением, поскольку оно не предназначено для работы с IIS.

В Visual Studio 2012 LocalDB устанавливается по умолчанию в Visual Studio. В Visual Studio 2010 и более ранних версиях SQL Server Express (без LocalDB) устанавливается по умолчанию в Visual Studio. Именно поэтому вы установили его как одно из предварительных требований в первом учебнике этой серии.

Дополнительные сведения о SQL Server выпусках, включая LocalDB, см. в следующих ресурсах, работающих с базами данных SQL Server.

Entity Framework и универсальные поставщики

Так как это программное обеспечение включено в пакеты NuGet, проект уже настроен таким образом, что необходимые сборки развертываются вместе с проектом. (Ссылки указывают на текущие версии этих пакетов, которые могут быть более новыми, чем установленные в начальном проекте, скачанном для этого руководства.)

Если вы развертываете поставщик услуг размещения стороннего поставщика вместо Azure, убедитесь, что вы используете Entity Framework 5,0 или более поздней версии. В более ранних версиях Code First Migrations требуется полное доверие, и большинство поставщиков услуг размещения запустит приложение со средним уровнем доверия. Дополнительные сведения о среднем уровне доверия см. в учебнике развертывание в IIS в качестве тестовой среды .

Настройка Code First Migrations для развертывания базы данных приложения

База данных приложения университета Contoso управляется Code First, и вы развертываете ее с помощью Code First Migrations. Общие сведения о развертывании базы данных с помощью Code First Migrations см. в первом учебнике этой серии.

При развертывании базы данных приложений обычно не требуется развертывать базу данных разработки со всеми данными в рабочей среде, так как большая часть данных в ней, вероятно, существует только в целях тестирования. Например, имена учащихся в тестовой базе данных являются вымышленными. С другой стороны, часто нельзя развертывать только структуру базы данных без каких бы то ни было данных. Некоторые данные в тестовой базе данных могут быть реальными и должны быть там, когда пользователи начинают использовать приложение. Например, база данных может иметь таблицу, содержащую допустимые значения категории или имена реальных отделов.

Для имитации этого распространенного сценария вы настроите метод Code First Migrations Seed , который вставляет в базу данных только те данные, которые должны находиться в рабочей среде. Этот метод Seed не должен вставлять тестовые данные, так как он будет выполняться в рабочей среде после того, как Code First создаст базу данных в рабочей среде.

В более ранних версиях Code First до выпуска миграций было распространено Seed методов вставки тестовых данных, так как при каждом изменении модели во время разработки база данных была полностью удалена и создана заново с нуля. При использовании Code First Migrations тестовые данные сохранены после внесения изменений в базу данных, поэтому не требуется включать тестовые данные в метод Seed . Скачанный проект использует метод, включающий все данные в методе Seed класса инициализатора. В этом учебнике вы отключите этот класс инициализатора и включите миграцию. Затем вы обновите метод Seed в классе конфигурации миграции, чтобы вставить только те данные, которые необходимо вставить в рабочую среду.

На следующей схеме показана схема базы данных приложения.

School_database_diagram

В этих учебниках предполагается, что Student и Enrollment таблицы должны быть пустыми при первом развертывании сайта. Другие таблицы содержат данные, которые должны быть предварительно загружены, когда приложение становится активным.

Отключение инициализатора

Так как вы будете использовать Code First Migrations, нет необходимости использовать инициализатор Code First DropCreateDatabaseIfModelChanges . Код для этого инициализатора находится в файле SchoolInitializer.CS в проекте CONTOSOUNIVERSITY. DAL. Параметр в элементе appSettings файла Web. config вызывает запуск этого инициализатора всякий раз, когда приложение пытается получить доступ к базе данных в первый раз:

Откройте файл Web. config приложения и удалите или закомментируйте элемент add , указывающий класс инициализатора Code First. Элемент appSettings теперь выглядит следующим образом:

Другой способ указания класса инициализатора — это сделать, вызвав Database.SetInitializer в методе Application_Start в файле Global. asax . Если вы включаете миграцию в проекте, который использует этот метод для указания инициализатора, удалите эту строку кода.

Включить Code First Migrations

Убедитесь, что проект ContosoUniversity (не ContosoUniversity. DAL) задан в качестве запускаемого проекта. В Обозреватель решенийщелкните правой кнопкой мыши проект ContosoUniversity и выберите Назначить запускаемым проектом. Code First Migrations будет искать в проекте запуска, чтобы найти строку подключения к базе данных.

В меню Сервис выберите диспетчер пакетов NuGet > консоль диспетчера пакетов.

Selecting_Package_Manager_Console

В верхней части окна консоли диспетчера пакетов выберите CONTOSOUNIVERSITY. DAL в качестве проекта по умолчанию, а затем в PM> строке введите "Enable-migrations".

Команда "включить-миграция"

Эта команда создает папку migrations в проекте CONTOSOUNIVERSITY. DAL и помещает в нее два файла: файл Configuration.CS , который можно использовать для настройки миграций, и файл InitialCreate.CS для первой миграции, которая создает базу данных.

Папка "миграции"

Вы выбрали проект DAL в раскрывающемся списке проект по умолчанию консоли диспетчера пакетов , так как команда enable-migrations должна выполняться в проекте, содержащем класс контекста Code First. Если этот класс находится в проекте библиотеки классов, Code First Migrations ищет строку подключения к базе данных в запускаемом проекте для решения. В решении ContosoUniversity веб-проект был задан как запускаемый проект. Если вы не хотите назначать проект со строкой подключения в качестве запускаемого проекта в Visual Studio, можно указать запускаемый проект в команде PowerShell. Чтобы увидеть синтаксис команды, введите команду get-help enable-migrations .

Команда enable-migrations автоматически создала первую миграцию, так как база данных уже существует. Альтернативой является создание миграции базы данных. Для этого используйте Обозреватель сервера или Обозреватель объектов SQL Server , чтобы удалить базу данных ContosoUniversity перед включением миграции. После включения миграции вручную создайте первую миграцию, введя команду "Add-Migration InitialCreate". Затем можно создать базу данных, введя команду Update-Database.

Настройка метода начального значения

В этом учебнике мы добавим фиксированные данные, добавив код в метод Seed класса Configuration Code First Migrations. Code First Migrations вызывает метод Seed после каждой миграции.

Откройте файл Configuration.CS и замените комментарии в методе Seed следующим кодом:

Ссылки на List имеют красные волнистые линии, так как у вас еще нет оператора using для ее пространства имен. Щелкните правой кнопкой мыши один из экземпляров List и выберите пункт Разрешить, а затем щелкните использование System. Collections. Generic.

Разрешение с помощью инструкции using

Этот фрагмент меню добавляет следующий код к операторам using в верхней части файла.

Нажмите клавиши CTRL + SHIFT + B, чтобы выполнить сборку проекта.

Теперь проект готов к развертыванию базы данных ContosoUniversity . После развертывания приложения при первом запуске и переходе к странице, которая обращается к базе данных, Code First создаст базу данных и выполнит этот метод Seed .

Добавление кода в метод Seed является одним из множества способов вставки фиксированных данных в базу данных. Альтернативой является добавление кода в методы Up и Down каждого класса миграции. Методы Up и Down содержат код, который реализует изменения базы данных. Примеры можно увидеть в учебнике развертывание обновления базы данных .

Кроме того, можно написать код, выполняющий инструкции SQL, с помощью метода Sql . Например, если вы добавили столбец бюджета в таблицу отдел и хотите инициализировать все бюджеты отдела до $1 000,00 в рамках миграции, можно добавить следующую строку кода в метод Up для этой миграции:

Sql("UPDATE Department SET Budget = 1000");

Создание скриптов для развертывания базы данных членства

Запустите приложение и щелкните курсы, а затем — Обновить кредиты.

Щелкните Обновить кредиты.

Откроется страница входа , так как для страницы Обновление кредитов требуются права администратора.

Введите имя пользователя Admin и девпвд в качестве пароля и нажмите кнопку войти.

Откроется страница Обновление кредитов .

Сведения о пользователях и ролях находятся в базе данных ASPNET-ContosoUniversity , указанной в строке подключения DefaultConnection в файле Web. config .

Эта база данных не находится под управлением Entity Framework Code First, поэтому для ее развертывания нельзя использовать миграции. Вы будете использовать поставщик Дбдакфкс для развертывания схемы базы данных, и вы настроите профиль публикации для выполнения сценария, который вставит исходные данные в таблицы базы данных.

Здесь, как правило, не требуется использовать одни и те же данные в рабочей среде в разработке. При первом развертывании сайта обычно исключаются большинство или все учетные записи пользователей, создаваемые для тестирования. Таким образом, скачанный проект имеет две базы данных членства: АСПнет-контосауниверсити. mdf с пользователями разработки и АСПнет-контосауниверсити-прод. mdf с рабочими пользователями. В этом руководстве имена пользователей одинаковы в обеих базах данных: Admin и unadmin. Оба пользователя имеют пароль девпвд в базе данных разработки и продпвд в рабочей базе данных.

Пользователи разработки развертываются в тестовой среде, а рабочие пользователи — в промежуточном и рабочем. Для этого в этом учебнике вы создадите два скрипта SQL: один для разработки и один для рабочей среды, а в последующих руководствах вы настроите процесс публикации для их запуска.

Скрипты развертывания данных можно создавать вручную с помощью SQL Server Management Studio (SSMS) или стороннего средства. В оставшейся части этого руководства вы узнаете, как это сделать в SSMS, но если вы не хотите устанавливать и использовать SSMS, вы можете получить скрипты из завершенной версии проекта и перейти к разделу, в котором они хранятся в папке решения.

Чтобы установить SSMS, установите его из центра загрузки: Microsoft SQL Server 2012 Express , щелкнув ENU\x64\SQLManagementStudio_x64_RUS. exe или ENU\x86\SQLManagementStudio_x86_RUS. exe. Если выбрать для системы неверное значение, его установка будет невозможна, и вы сможете попробовать другой вариант.

(Обратите внимание, что это загрузка 600 МБ. Установка может занять много времени, и потребуется перезагрузка компьютера.)

На первой странице центра установки SQL Server щелкните создать SQL Server изолированную установку или добавить компоненты к существующей установкеи следуйте инструкциям, принимая значения по умолчанию.

Создание скрипта базы данных разработки

В диалоговом окне соединение с сервером введите (LocalDB) \v11.0 в качестве имени сервера, оставьте для параметра authentication (проверка подлинности Windows) значение Authentication, а затем нажмите кнопку подключить.

Подключение SSMS к серверу

В окне Обозреватель объектов разверните узел базы данных, щелкните правой кнопкой мыши элемент ASPNET-ContosoUniversity, выберите пункт задачи, а затем выберите команду Сформировать скрипты.

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

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

Можно пропустить шаг Выбор объектов , так как по умолчанию используется сценарий для всей базы данных и всех объектов базы данных , и именно то, что вам нужно.

Щелкните Дополнительно.

Параметры создания скриптов SSMS

В диалоговом окне Дополнительные параметры скрипта прокрутите вниз до пункта типы данных для создания скриптаи выберите параметр только данные в раскрывающемся списке.

Измените значение в сценарии использовать базу данных на false. Инструкции USE недопустимы для базы данных SQL Azure и не требуются для развертывания на SQL Server Express в тестовой среде.

Только данные скриптов SSMS, без инструкции USE

В диалоговом окне Создание и публикация скриптов в поле имя файла указывается, где будет создан скрипт. Измените путь к папке решения (папке с файлом ContosoUniversity. sln) и именем файла АСПнет-Дата-дев. SQL.

Создан скрипт SSMS

Создание скрипта рабочей базы данных

Так как проект не был запущен с рабочей базой данных, он еще не присоединен к экземпляру LocalDB. Поэтому сначала необходимо присоединить базу данных.

В обозревателе объектовSSMS щелкните правой кнопкой мыши элемент базы данных и выберите команду присоединить.

Присоединение SSMS

В диалоговом окне Присоединение баз данных нажмите кнопку Добавить , а затем перейдите к файлу АСПнет-контосауниверсити-прод. mdf в папке app_Data .

Надстройка SSMS Add. mdf для присоединения

Выполните ту же процедуру, которая использовалась ранее, чтобы создать скрипт для рабочего файла. Назовите файл скрипта АСПнет-Дата-прод. SQL.

Сводка

Теперь обе базы данных готовы к развертыванию, и в папке решения есть два скрипта развертывания данных.

Скрипты развертывания данных

В следующем учебнике вы настраиваете параметры проекта, влияющие на развертывание, и настраиваете автоматическое преобразование файла Web. config для параметров, которые должны отличаться в развернутом приложении.

Дополнительные сведения

Дополнительные сведения о NuGet см. в статье руководство по управлению библиотеками проектов с помощью NuGet и NuGet. Если вы не хотите использовать NuGet, вам потребуется изучить, как анализировать пакет NuGet, чтобы определить, что он делает при установке. (Например, это может быть Настройка преобразований Web. config , Настройка сценариев PowerShell для выполнения во время сборки и т. д.). Дополнительные сведения о том, как работает NuGet, см. в разделе Создание и Публикация пакета , файла конфигурации и преобразований исходного кода.

Цель урока: Изучить основные принципы работы с базой данных. Краткое описание реляционной модели баз данных. Работа с базой данных (создание таблиц, связей в VS 2012). Команды INSERT, UPDATE, DELETE, SELECT. Использование LinqToSql и Linq. Создание репозитария, IRepository, SqlRepository.

Что такое БД

Реляционная база данных — база данных, основанная на реляционной модели данных. Реляционность – это отношения (связи) от англ. relation.

Таблицы
  • у таблицы есть имя (уникальное)
  • нет двух одинаковых строк
  • столбцы имеют разные наименования (нет двух одинаковых столбцов)
  • порядок строк в таблице произвольный (т.е. не надо учитывать порядок строк, если не задана сортировка)
  • Имя столбца
  • Тип данных для этого столбца
Связи
  • Первичный ключ – это набор столбцов (атрибутов) таблицы, однозначно определяющих уникальность строки. Обычно это одно поле, называется ID. Оно является автоикрементным, т.е. при попытке добавления записи, там автоматически вставляется 1, 2, 3, 4… n+1, где n – это значение последнего добавленного ID.
  • Внешний ключ – это набор столбцов (атрибутов) таблицы, которые однозначно определяют уникальность строки в другой таблице. Опять же это обычно одно поле, названное [Имя таблицы]ID. Но не является автоинкрементным.
  • Прописана связь между первичным ключом и внешним ключом.
  • Один-к-одному. Т.е. одной строке в таблице соответствует одна строка в другой таблице. Это редко используется, но используется. Например, в одной таблице данные о пользователе, а в другой — дополнительные данные о том же пользователе. Такой вариант необходим, чтобы манипулировать, по необходимости, меньшим количеством данных.
  • Один-ко-многим. Одной строк в таблице A соответствует одна или несколько строк в таблице B. Но одной строке в таблице B соответствует только одна строка в таблице A. В этом случае в таблице B существует внешний ключ, который однозначно определяет запись в таблице A.
  • Многие-ко-многим. Одной строке в таблице А соответствует одна или несколько строк в таблице В, что истинно и в обратном. В данном случае создается дополнительная таблица со своим первичным ключом, и двумя внешними ключами к таблице A и B.
Создание простой схемы в БД

Создадим БД в VS 2012:


Назовем её LessonProject, и добавим 3 таблицы Role User и UserRole.
Создадим таблицу Role:



Для строковых значений используем тип nvarchar(n), где n – максимальная длина строки, обычно используется от 50 до 500. Для больших текстовых строк используется nvarchar(MAX).

Устанавливаем первичный ключ:


Задаем для ID автоинкремент:


Подобным образом создаем таблицу User:

Поле Тип поля
ID int
Email nvarchar(150)
Password nvarchar(50)
AddedDate datetime
ActivatedDate datetime (null)
ActivatedLink nvarchar(50)
LastVisitDate datetime (null)
AvatarPath nvarchar(150) (null)

Создаем таблицу UserRole:

Поле Тип поля
ID int
UserID int
RoleID int


Добавляем новую связь, нажав Add. Добавление связей происходит в таблице, где находятся внешние ключи. Раскрываем вкладку Tables and Columns и выставляем таблицу с первичным ключом, и выбираем внешний ключ в текущей таблице UserRole.


В свойствах INSERT And UPDATE Specification выставляем On Update/On Delete свойства Cascade:


Это необходимо для того, чтобы при изменении/удалении столбца из таблицы Role все связанные с этой строкой строки таблицы UserRole должны быть изменены или удалены.

Аналогичную связь мы устанавливаем с таблицей User.

Таким образом, таблицы Role и User имеют отношения многие ко многим через таблицу UserRole. Т.е. у одного пользователя может быть больше одной роли, и одна и та же роль может быть у нескольких пользователей.

SELECT, INSERT, UPDATE, DELETE.

В реляционных базах данных используется язык запросов SQL.

Есть 4 основные команды для манипулирования данными — SELECT, INSERT, UPDATE, DELETE

SELECT – для выбора данных и таблиц.
Пример:

INSERT — Добавление строк в таблицу
Пример:

UPDATE – изменение значений в таблице
Пример:

DELETE – удаление строк из таблицы
Пример:

LinqToSQL и Linq.

Создадим проект LessonProject.Model для работы с БД типа ClassLibrary.
Добавляем LINQ to SQL Classes тип, называем LessonProejctDb.dbml


Открываем объект, выделяем все таблицы и мышкой переносим на холст:


  • классы, готовые к использованию в работе с БД
  • визуальное отображение таблиц и связей

Добавим несколько данных в таблицу Role и User:

1 admin Админ
2 customer Заказчик

ID UserID RoleID
1 1 1
2 1 2
3 2 2

Создадим консольный проект Lesson3 и подключим LessonProject.Model. Добавим сборку System.Configuration и System.Data.Linq. Проинициализируем context и выведем данные о ролях:


Для добавления строки в Role делаем так:

Для удаления строки в Role делаем так:

Для изменения данных делаем так:

Для манипуляции данных используется язык запросов Linq. Мы рассмотрим только некоторые основные функции Linq. Linq применяется для типов реализующий интерфейс IQueryable<>

    .Where() – основная функция фильтрации. Возвращает тип IQueryable. Условие внутри должно возвращать булево значение (bool).

Создание репозитория IRepository, SqlRepository.

Собственно с БД мы уже можем работать, только теперь нужно отделить модель данных от конкретной реализации, т.е. наши контроллеры про context и System.Data.Linq вообще не должны ничего знать.

Для этого создадим интерфейс IRepository, где будет дан доступ к данным, а также выведены методы для создания, изменения и удаления этих данных.


Реализацию назовем SqlRepository. Так как мы с данным контекстом SqlRepository не хотим особо связывать, то добавим Ninject модуль в проект LessonProject.Model:


Создадим класс SqlRepository:

Прежде, чем реализовать доступ ко всем таблицам, создание, удаление и изменение, подумаем о том, что файл этот будет выглядеть громадным и неуклюжим. Таким кодом будет управлять тяжело физически. Так что сделаем отдельную папку SqlRepository и SqlRepository класс сделаем partial, а в папке создадим реализации интерфейса IRepository, разбитые по каждой таблице. Назовем файл Role:

Небольшой проект содержит от 10 до 40 таблиц, большой проект от 40, и всё это хотелось бы как-то автоматизировать. Создадим несколько сниппетов, для IRepository и для SqlRepository. Сниппеты – это уже готовые шаблоны кода, которые вызываются с помощью intelliSence, и позволяют быстро создавать код.

Сниппеты

Для IRepository таблиц, создадим table.snippet:


Для SqlRepository создадим сниппет sqlTable.snippet:

Для того, чтобы добавить code-snippet. откроем TOOLS -> Code Snippet Manager… (Ctrl-K, B). В окне нажимаем Import и импортируем оба сниппета в My Code snippet:


Finish, OK.
Используем для таблиц User и UserRole.



Осталось прописать только поля для Update [имя таблицы], но это уже меньше работы.

Proxy

Как видим, классы, которые мы используем, являются partial, поэтому их можно дополнить. Создадим, подобно SqlRepository, папку Proxy, где будем размещать partial классы. Например, для класса User создадим метод, который автоматически генерирует строку, требуемую для активации пользователя:

Добавим строку доступа к БД в web.Config:

Проинициализируем работу с БД в Ninject:

Применяем InRequestScope(). Т.е. каждый запрос будет использовать отдельный объект SqlRepository. Это позволит избежать коллизий при исполнении.Объявляем IRepository в контроллере:

Подавляющее большинство динамических сайтов для создания страниц на лету используют для заполнения контент, хранящийся в базе данных. Выбор и получение контента из таблиц базы данных происходит с высокой скоростью независимо от размера файла базы данных.

Модуль Entity Framework Core

Entity Framework Core – технология объектно-ориентированного доступа к данным. При работе с базами данных через модуль EF Core запрошенная таблица преобразуется в экземпляр класса, а столбцы в одноименные свойства. Изменения значений свойств сохраняется в базе данных.

При работе с Entity Framework Core классы модели базы данных сопоставляются таблицам базы. Инкапсуляция реляционных запросов превращает работу с базами данных в «обычное» объектно-ориентированное программирование. В отличие от этого драйверы реляционного доступа, возвращают данные в виде таблицы или параметров, которые требуют дополнительной обработки.

Установка необходимых пакетов NuGet

Для использования возможностей объектно-реляционного сопоставления «объект - база данных» необходима установка приложение пакета Microsoft.EntityFrameworkCore.

Кроме этого, понадобится установка расширений SqlServerDbContextOptionsExtensions. UseSqlServer для этого необходимо в веб приложение добавить пакет Microsoft.EntityFrameworkCore. SqlServer. Это необходимо для настройки контекста и создания строк подключения с помощью построителей.

База данных для исследования


Создадим базу данных MS SQL. Для этого необходим MS SQL Server или MS SQL Server Express и MS SQL Server Management Studio. Создавать таблицы и связи между ними будем посредством инструмента управления MS SQL Server Management Studio. Базу данных назовем DBMSSQL. Добавим в базу три небольшие таблицы кратко описывающие науки и ее разделы.

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

  • PK (primary key) – первичный ключ
  • FK (foreign key) – ключ внешней связи
  • UI (unique index) – уникальный индекс

Модель базы данных

Модуль Entity Framework Core осуществляет доступ к базам данных посредством моделей. Модель – классы, определенные в соответствии таблицам базы данных. Entity Framework Core сопоставляет столбец таблицы и одноименное свойство класса соответствующей таблицы данных.

Соответственно таблицам создадим классы модели для базы данных DBMSSQL. Все таблицы в базе имеют одинаковые столбцы Id, Name, NumberViews, Uri. Чтобы уменьшить количество повторного программного кода создадим абстрактный класс с общими свойствами. Далее этот класс унаследуют классы модели базы данных.

Листинг модели базы данных:

Контекст сеанса с базой данных DBContext

Контекст баз данных представляется классом DBContext, необходимым для взаимодействия с базами данных. Объект класса производного от DBContext позволяет выполнять запросы и сохранять изменения, произведенные над свойствами экземпляров модели.

Во время взаимодействия с базой данных класс контекста наполняет классы модели информацией из таблиц базы данных. Сеанс взаимодействия контекста с базой данных краток, и состоит из одного цикла:

  • Создание объекта класса контекста
  • Получение данных (сохранение изменений)
  • Закрытие сеанса и удаление экземпляра контекста

Для наполнения классов модели информацией из базы в классе контекста необходимо определить свойства DbSet<TEntity>, где роль сущности (Entity) будут исполнять классы модели.

Класс DbSet<TEntity> - это оболочка для сущности (типа объекта таблицы базы данных), которой являются классы модели. Включение экземпляра класса DbSet<TEntity> в контекст означает, что он включен в модель Entity Framework Core. Свойства DbSet<TEntity> автоматически инициализируются при создании экземпляра класса контекста. Имена свойств, представляющих классы модели, должны быть идентичны названиям соответствующих таблиц в базе данных.

В принципе этих определений уже достаточно для работы с базами данных. Вся черновая работа скрыта инкапсуляцией, что вызывает приятное созерцание минимализма программного кода.

Листинг класса контекста для взаимодействия с базой данных DBMSSQL:

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

Реквизиты подключения к определенной базе данных, для контекста, указываются в строке подключения (connection string). Строку подключения к MS SQL Server удобно создавать с помощью построителей. Например, с помощью класса SqlConnectionStringBuilder, входящего в состав пространства имён Microsoft.Data.SqlClient (пакет Microsoft.EntityFrameworkCore.SqlServer). Таким способом создаётся синтактически правильная строка подключения к серверу базы данных.

Строка подключения отправляет серверу информацию для идентификации клиента, способе проверки клиента и выборе базы данных для последующих запросов. Разные режимы проверки подлинности пользователя требуют соответствующее содержание строки подключения.

Листинг двух вариантов строк подключения к SQL серверу:

Выполнение запросов к базе данных

Подключение к базе данных в веб приложении происходит при создании экземпляра класса контекста SqlDBContext. Экземпляр контекст создаётся в конструкторе контроллера HomeController.

После создания объекта контекста можно выполнять запросы к базе данных. В представления полученная информация передаётся в виде слабо-типизированных ViewBag и строго-типизированных объектов посредством Model.

Представление с моделью

Листинг представления с моделью:

Представление с ViewBag

Полученные данные можно передавать в представления динамическими переменными. Слаботипизированная переменная ViewBag может передавать любой объект, и что удобно, не требует приведения типов при присваивании соответствующему объекту.

В нашем случае в представление передаются списки объектов с информацией, полученной из базы данных. Путём перебора элементов списков, используя минимум кода Razor и разметки HTML, информация выводится в браузер в удобочитаемом виде.

Листинг представления с применением динамического свойства ViewBag:

Читайте также: