Взаимодействие с данными. Подходы

Code First к существующей базе данных

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

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

В первой главе при создании первого приложения с Entity Framework мы использовали подход Code First. Этот подход очень прост и удобен. Но он также и очень гибкий. Так, вполне часто распространена ситуация, когда база данных уже имеется. И здесь опять же поможет Code First. Иногда программисты называют данный подход Code Second. Посмотрим на примере.

Вначале создадим новый проект. Затем создадим тестовую базу данных. В Visual Studio выберем в меню пункт View->SQL Server Object Explorer. В открывшемся окне SQL Server Object Explorer создадим новую базу данных. Для этого раскроем узел сервера, нажмем на узел Databases правой кнопкой мыши и в появившемся контекстном меню выберем Add New Database.

Connect to Database in Visual Studio

Далее отобразится окно, в котором в качестве имени базы данных введем userstoredb:

После создания БД добавим в нее таблицу. Нажмем правой кнопкой мыши на узел Tables и в появившемся контекстном меню выберем Add New Table.

Затем в центральном поле в режиме дизайнера создадим следующее определение таблицы:

В поле T-SQL (или графически) определим структуру и имя таблицы, типы столбцов и после этого нажмем в верхнем левом углу на кнопку Update.

В новом окне нам будет выдана некоторая информация об изменениях, производимых в бд:

Нажмем на кнопку Update Database. И после этого будет создана таблица Users.

Мы можем добавить некоторые данные в таблицу. Для этого нажмем на таблицу в окне Server Explorer правой кнопкой мыши и выберем пункт View Data.

У нас откроется форма для работы с данными, в которую введем пару строк:

База данных готова. Теперь нам надо добавить подключение в файл конфигурации приложения. В Solution Explorer найдем файл App.config и откроем его. Перед закрывающим тегом </configuration> добавим новую секцию connectionStrings:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<!--остальное содержимое-->
	<connectionStrings>
		<add name="UserDB" connectionString="data source=(localdb)\MSSQLLocalDB;Initial Catalog=userstoredb;Integrated Security=True;"
	 providerName="System.Data.SqlClient"/>
	  </connectionStrings>
</configuration>

Теперь определим классы модели данных и контекста. Добавим класс модели User:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

И также добавим класс контекста данных:

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

namespace CodeSecond
{
    public class UserContext : DbContext
    {
        public UserContext():
            base("UserDB")
        { }

        public DbSet<User> Users { get; set; }
    }
}

В конструкторе контекста данных мы передаем в конструктор базового класса имя строки подключения из файла конфигурации App.config. Так как мы определили там строку подключения UserDB (<add name="UserDB"), то именно это значение и используется в конструкторе.

Однако, как вариант, мы могли не использовать конструктор в классе контекста данных, а определить в качестве имени строки подключения название этого класса, например: <add name="UserContext" connectionString="....

И для получения данных определим следующий код в консольном приложении:

using(UserContext db = new UserContext())
{
    var users = db.Users;
    foreach(User u in users)
    {
        Console.WriteLine("{0}.{1} - {2}", u.Id, u.Name, u.Age);
    }
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850