1. Первым делом добавим новый класс, который будет описывать данные. Пусть наше приложение будет посвящено работе с пользователями. Поэтому добавим в проект новый класс Пользователь:
1 2 3 4 5 6 | public class User{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; }} |
Это обычный класс, который содержит некоторое количество автосвойств. Каждое свойство будет сопоставляться с столбцом в таблице из бд.
2. Теперь для взаимодействия с бд нам нужен контекст данных. Это своего рода посредник между бд и классами, описывающими данными. Но, по умолчанию еще не добавлена библиотека для EF. Чтобы добавить ее, нажмем на проект правой кнопкой мыши и выберем в контекстном меню Управление пакетами NuGet ...:

Затем в появившемся окне управления NuGet-пакетами в окне поиска введем слово "Entity" и выберем пакет собственно Entity Framework и установим его:

Основу функциональности Entity Framework составляют классы находящиеся в названии System.Data.Entity . Среди всего набора классов этого пространства имен следует следующие:
Dbtext : использовать контекст данных, использовать для взаимодействия с базой данных.
DbModelBuilder : сопоставляет классы на языке C # с сущностями в базе данных.
DbSet / DbSet <TEntity> : представляет набор сущностей, хранящихся в базе данных
В любом приложении, работающим с БД через Entity Framework, нам нужен будет контекст (класс производный от DbContext) и набор данных DbSet, через который мы сможем взаимодействовать с таблицами из БД. В данном случае контекстом является класс UserContext.
Вторе этого класса вызывается конструктор конструктора базового класса, который передается строка "DbConnection" - это имя будущей строки подключения к базе данных. В принципе мы можем использовать конструктор.
После установки пакета добавим в проект новый класс UserContext:
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;namespace FirstEF6App{ class UserContext : DbContext { public UserContext() :base("DbConnection") { } public DbSet<User> Users { get; set; } }} |
И также в классе определено одно свойство Users, которое будет хранить набор объектов User.
В классе контекста данных набор объектов представляет класс DbSet<T>. Через это свойство будет осуществляться связь с таблицей объектов Пользователь в бд.
4.
И теперь нам надо установить подключение к базе данных. Для установки подключения обычно используется файл конфигурации приложения. В проектах для десктопных приложений файл конфигурации называется App.config (как в нашем случае), в проектах веб-приложений - web.config . В нашем случае, поскольку у нас консольное приложение, это файл App.config . После добавления Entity Framework он выглядит примерно следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 год | <?xml version="1.0" encoding="utf-8"?><configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1" /> </startup> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework></configuration> |
Содержимое файла в каждом конкретном случае может отличаться. В любом случае после добавления EntityFramework в проект в нем будет содержаться элемент configSections. И после закрывающего тега </configSections>добавим следующий элемент:
1 2 3 4 | <connectionStrings> <add name="DBConnection" connectionString="data source=(localdb)\MSSQLLocalDB;Initial Catalog=userstore;Integrated Security=True;"providerName="System.Data.SqlClient"/> </connectionStrings> |
Все подключения к источнику данных устанавливаются в секции connectionStrings, каждое отдельное подключение представляет элемент add. В конструкторе класса контекста UserContext мы передаем в качестве названия подключения строку "DbConnection", поэтому данное название указывается в атрибуте name="DBConnection".
Настройку подключения задает атрибут connectionString. В данном случае мы устанавливаем название базы данных, с которой будем взаимодействовать - userstore.
5.
Начинаем работу с БД
Теперь перейдем к файлу Program.cs и изменим его содержание следующим образом:
Теперь перейдем к файлу Program.cs и изменим его содержание следующим образом:
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 | using System;namespace FirstEF6App{ class Program { static void Main(string[] args) { using(UserContext db = new UserContext()) { // создаем два объекта User User user1 = new User { Name = "Tom", Age = 33 }; User user2 = new User { Name = "Sam", Age = 26 }; // добавляем их в бд db.Users.Add(user1); db.Users.Add(user2); db.SaveChanges(); Console.WriteLine("Объекты успешно сохранены"); // получаем объекты из бд и выводим на консоль var users = db.Users; Console.WriteLine("Список объектов:"); foreach(User u in users) { Console.WriteLine("{0}.{1} - {2}", u.Id, u.Name, u.Age); } } Console.Read(); } }} |
Так как класс UserContext через родительский класс DbContext реализует интерфейс IDisposable, то для работы с UserContext с автоматическим закрытием данного объекта мы можем использовать конструкцию using.
public class User{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; }}
UserContext db = new UserContext()
//, где UserContext - это класс класс, производный от DbContext)
--------------------------------------------------------------------------------class UserContext : DbContext { public UserContext() :base("DbConnection") { } public DbSet<User> Users { get; set; } // Users -- это имя таблицы в БД } ---------------------------------------------// получаем объекты из бд и выводим на консоль
var users = db.Users;
Console.WriteLine("Список объектов:");foreach(User u in users) { Console.WriteLine("{0}.{1} - {2}", u.Id, u.Name, u.Age); }
Комментариев нет:
Отправить комментарий