Данное руководство устарело. Актуальное руководство: Руководство по Entity Framework Core
В первой главе при создании первого приложения с Entity Framework мы использовали подход Code First. Этот подход очень прост и удобен. Но он также и очень гибкий. Так, вполне часто распространена ситуация, когда база данных уже имеется. И здесь опять же поможет Code First. Иногда программисты называют данный подход Code Second. Посмотрим на примере.
Вначале создадим новый проект. Затем создадим тестовую базу данных. В Visual Studio выберем в меню пункт View->SQL Server Object Explorer. В открывшемся окне SQL Server Object Explorer создадим новую базу данных. Для этого раскроем узел сервера, нажмем на узел Databases правой кнопкой мыши и в появившемся контекстном меню выберем Add New Database.
Далее отобразится окно, в котором в качестве имени базы данных введем 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); } }