Entity Framework

ADO.NET Entity Framework (EF) — объектно-ориентированная технология доступа к данным, является object-relational mapping (ORM) решением для .NET Framework от Microsoft.

Предоставляет возможность взаимодействия с объектами как посредством LINQ в виде LINQ to Entities, так и с использованием Entity SQL.

Entity SQL представляет собой язык, подобный языку SQL, который позволяет выполнять запросы к концептуальным моделям в Entity Framework

Для облегчения построения web-решений используется как ADO.NET Data Services (Astoria), так и связка из Windows Communication Foundation и Windows Presentation Foundation, позволяющая строить многоуровневые приложения, реализуя один из шаблонов проектирования MVC, MVP или MVVM.

Релиз ADO.NET Entity Framework состоялся 11 августа 2008 года в составе .NET Framework 3.5 Service Pack 1 и Visual Studio 2008 Service Pack 1.

В VS 2008 вошёл EDM Wizard для реверс-инжиниринга существующих баз данных и EDM Designer для редактирования сгенерированных моделей или создания их с нуля.

Версия 6.0 была выпущена 17 октября 2013 года[3] и сейчас это проект с открытым исходным кодом под лицензией Apache License v2. В версии 6.0 был сделан ряд улучшений в поддержке метода работы Code First.

Начиная с версии Entity Framework 4.1 предоставляется три подхода по проектированию базы данных:

Database-First

Подходит для проектировщиков баз данных – сначала необходимо создать базу данных с помощью различных инструментов (например, SQL Server Management Studio), а затем генерируете EDMX-модель базы данных (предоставляет удобный графический интерфейс для взаимодействия с базой данных в виде диаграмм и объектную модель в виде классов C#).

В данном случае вам нужно работать с SQL Server и хорошо знать синтаксис T-SQL, но при этом не нужно разбираться в C#.

Model-First

Подходит для архитекторов – сначала создается графическая модель EDMX в Visual Studio (в фоновом режиме создаются классы C# модели), а затем генерируете на основе диаграммы EDMX базу данных.

При данном подходе не нужно знать ни деталей T-SQL ни синтаксиса C#.

Code-First

Подходит для программистов – при данном подходе модель EDMX вообще не используется и необходимо вручную настраивать классы C# объектной модели (данный подход поддерживает как генерацию сущностных классов из существующей базы данных, так и создание базы данных из созданной вручную модели объектов C#).

Данный способ подходит для программистов, хорошо знакомых с синтаксисом C#.

Установка Entity Framework

Подключить Entity Framework можно к любому проекту — от Xamarin до ASP.NET.

Для начала создайте проект Console Application в Visual Studio. Затем откройте менеджер пакетов NuGet:


Entity Framework


Entity Framework


Entity Framework

NuGet Manager – это инструмент, который помогает разработчику управлять сторонними библиотеками (пакетами) в своем проекте.

Скачиваем пакет с этим фреймворком:


Entity Framework

При установке соглашаемся с изменениями и лицензией:


Entity Framework

Создание первого приложения

Наше приложение будет создано с помощью подхода Code First.

Когда Entity Framework установится, нужно подключиться к СУБД. Это делается с помощью файла конфигурации.

Так как рассматривается консольное приложение, то надо создать и открыть файл App.config (нажимаем правой кнопкой мыши на файл нашего проекта):


Entity Framework


Entity Framework

В файл App.config необходимо добавить следующий код:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="DBConnection" connectionString="data source=.\SQLEXPRESS;Initial Catalog=GameDB;Integrated Security=True;"
  providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>

Все подключения к источникам данных устанавливаются в секции connectionStrings, а каждое отдельное подключение представляет элемент add.

В конструкторе класса контекста UserContext мы передаем в качестве названия подключения строку “DbConnection”, поэтому данное название указывается в атрибуте name=”DBConnection”.

Настройку строки подключения задает атрибут connectionString. В данном случае мы устанавливаем название базы данных, с которой будем взаимодействовать – userstore.

В качестве СУБД мы используем MS SQL Server 2019.

Наше приложение будет посвящено работе с пользователями. Поэтому добавим в проект новый класс User:

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

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

    class UserContext : DbContext
    {
        public UserContext()
            : base("DbConnection")
        { }

        public DbSet Users { get; set; }
    }
}

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

Основу функциональности Entity Framework составляют классы, находящиеся в пространстве имен System.Data.Entity. Среди всего набора классов этого пространства имен следует выделить следующие:

  • DbContext: определяет контекст данных, используемый для взаимодействия с базой данных.
  • DbModelBuilder: сопоставляет классы на языке C# с сущностями в базе данных.
  • DbSet/DbSet<TEntity>: представляет набор сущностей, хранящихся в базе данных.

В любом приложении, работающим с БД через Entity Framework, нам нужен будет контекст (класс производный от DbContext) и набор данных DbSet, через который мы сможем взаимодействовать с таблицами из БД. В данном случае таким контекстом является класс UserContext.

Теперь перейдем к файлу Program.cs и изменим его содержание следующим образом:

using System;

namespace consol
{
    class Program
    {
        static void Main(string[] args)
        {
            using (UserContext db = new UserContext())
            {
                // создаем два объекта User
                User user1 = new User { Name = "Виктор", Age = 24 };
                User user2 = new User { Name = "Максим", Age = 25 };

                // добавляем их в бд
                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.

В конструкции using создаются два объекта User и добавляются в базу данных. Для их сохранения нам достаточно использовать метод Add: db.Users.Add(user1)

Чтобы получить список данных из бд, достаточно воспользоваться свойством Users контекста данных: db.Users

В результате после запуска программа выведет на консоль:


Entity Framework

Таким образом, Entity Framework обеспечивает простое и удобное управление объектами из базы данных. При том в данном случае нам не надо даже создавать базу данных и определять в ней таблицы.

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

Проверить базу данных можно в обозревателе объектов SQL Server Management Studio:


Entity Framework

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Добавить комментарий

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

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Работа с базой данных в C#

Работа с базой данных в C#

В данной статье мы подробно поговорим о разработке небольшого приложения с помощью Visual Studio базы данных и языка C#. Советуем поэтапно выполнять все инструкции из

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

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

В прошлой статье “Сокеты в C#” мы познакомились с сокетами и подробно рассмотрели классы для работы с ними. В этой статье мы разработаем простое приложение

 
Сокеты в С#

Сокеты в С#

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

 
Пространство имен System.Net.

Пространство имен System.Net.

В этой статье коротко поговорим о пространстве имен System.Net и некоторых его классах. В последующих статьях будем рассматривать другие его классы. Пространство имён System.Net содержит

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: