Как установить entity framework в visual studio 2019
You can use EF Core to develop applications on Windows using Visual Studio. The latest version of Visual Studio is recommended.
Get the Entity Framework Core runtime
To add EF Core to an application, install the NuGet package for the database provider you want to use.
You can indicate a specific version in the dotnet add package command, using the -v modifier. For example, to install EF Core 2.2.0 packages, append -v 2.2.0 to the command.
Visual Studio NuGet Package Manager Dialog
From the Visual Studio menu, select Project > Manage NuGet Packages
Click on the Browse or the Updates tab
To install or update the SQL Server provider, select the Microsoft.EntityFrameworkCore.SqlServer package, and confirm.
Visual Studio NuGet Package Manager Console
From the Visual Studio menu, select Tools > NuGet Package Manager > Package Manager Console
To install the SQL Server provider, run the following command in the Package Manager Console:
To update the provider, use the Update-Package command.
To specify a specific version, use the -Version modifier. For example, to install EF Core 2.2.0 packages, append -Version 2.2.0 to the commands
Get the Entity Framework Core tools
You can install tools to carry out EF Core-related tasks in your project, like creating and applying database migrations, or creating an EF Core model based on an existing database.
Two sets of tools are available:
The Package Manager Console (PMC) tools run in Visual Studio on Windows. These commands start with a verb, for example Add-Migration , Update-Database .
Although you can also use the dotnet ef commands from the Package Manager Console, it's recommended to use the Package Manager Console tools when you're using Visual Studio:
They automatically work with the current project selected in the PMC in Visual Studio, without requiring manually switching directories.
They automatically open files generated by the commands in Visual Studio after the command is completed.
dotnet ef must be installed as a global or local tool. Most developers prefer installing dotnet ef as a global tool using the following command:
dotnet ef can also be used as a local tool. To use it as a local tool, restore the dependencies of a project that declares it as a tooling dependency using a tool manifest file.
To update the tools, use the dotnet tool update command.
Install the latest Microsoft.EntityFrameworkCore.Design package.
Always use the version of the tools package that matches the major version of the runtime packages.
Get the Package Manager Console tools
To get the Package Manager Console tools for EF Core, install the Microsoft.EntityFrameworkCore.Tools package. For example, from Visual Studio:
Upgrading to the latest EF Core
Any time we release a new version of EF Core, we also release a new version of the providers that are part of the EF Core project, like Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Sqlite, and Microsoft.EntityFrameworkCore.InMemory. You can just upgrade to the new version of the provider to get all the improvements.
If you need to update an application that is using a third-party database provider, always check for an update of the provider that is compatible with the version of EF Core you want to use. For example, database providers for version 1.0 are not compatible with version 2.0 of the EF Core runtime.
Third-party providers for EF Core usually don't release patch versions alongside the EF Core runtime. To upgrade an application that uses a third-party provider to a patch version of EF Core, you may need to add a direct reference to individual EF Core runtime components, such as Microsoft.EntityFrameworkCore, and Microsoft.EntityFrameworkCore.Relational.
EF Core можно использовать для разработки приложений в Windows с использованием Visual Studio. Рекомендуется использовать последнюю версию Visual Studio.
Получение среды выполнения Entity Framework Core
Чтобы добавить EF Core в приложение, установите пакет NuGet для поставщика базы данных, который вы хотите использовать.
Вы можете указать в команде dotnet add package конкретную версию, используя модификатор -v . Например, чтобы установить пакеты EF Core 2.2.0, добавьте к команде -v 2.2.0 .
Диалоговое окно диспетчера пакетов NuGet в Visual Studio
В меню Visual Studio выберите "Проект" > "Управление пакетами NuGet"
Чтобы установить или обновить поставщик SQL Server, выберите пакет Microsoft.EntityFrameworkCore.SqlServer и подтвердите свой выбор.
Консоль диспетчера пакетов NuGet в Visual Studio
В меню Visual Studio выберите "Сервис" > "Диспетчер пакетов NuGet" > "Консоль диспетчера пакетов"
Чтобы установить поставщик SQL Server, в консоли диспетчера пакетов выполните следующую команду:
Чтобы обновить поставщик, используйте команду Update-Package .
Чтобы указать конкретную версию, используйте модификатор -Version . Например, чтобы установить пакеты EF Core 2.2.0, добавьте в команды -Version 2.2.0 .
Получение инструментов Entity Framework Core
Вы можете установить инструменты для выполнения задач, связанных с EF Core, в своем проекте, таких как создание и применение миграций базы данных, а также создание модели EF Core на основе существующей базы данных.
Доступно два набора инструментов:
Инструменты консоли диспетчера пакетов работают в Visual Studio в Windows. Эти команды начинаются с глагола, например Add-Migration , Update-Database .
Хотя вы можете использовать команды dotnet ef в консоли диспетчера пакетов, в Visual Studio рекомендуется использовать инструменты консоли диспетчера пакетов:
Они автоматически работают для выбранного в PMC проекта в Visual Studio без переключения каталогов вручную.
Они автоматически открывают файлы, созданные командами в Visual Studio, после завершения соответствующей команды.
Средство dotnet ef должно быть установлено в качестве глобального или локального средства. Большинство разработчиков предпочитают устанавливать средство dotnet ef в качестве глобального средства, используя следующую команду:
Средство dotnet ef также может использоваться в качестве локального средства. Чтобы использовать его в качестве локального средства, восстановите зависимости проекта, в котором оно объявляется в качестве соответствующей зависимости, с помощью файла манифеста средства.
Чтобы обновить средства, используйте команду dotnet tool update .
Установите последнюю версию пакета Microsoft.EntityFrameworkCore.Design .
Всегда используйте версии пакетов инструментов, которые соответствуют основному номеру версии для пакетов среды выполнения.
Получение инструментов консоли диспетчера пакетов
Чтобы получить инструменты консоли диспетчера пакетов для EF Core, установите пакет Microsoft.EntityFrameworkCore.Tools . Например, в Visual Studio:
Обновление до последней версии EF Core
Каждый раз при выпуске новой версии EF Core мы также выпускаем новую версию поставщиков, которые входят в проект EF Core, например Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.Sqlite и Microsoft.EntityFrameworkCore.InMemory. Кроме того, можно просто обновить поставщик до новой версии, чтобы получить все улучшения.
Если требуется обновить приложение, использующее сторонний поставщик базы данных, всегда ищите обновление поставщика, совместимое с нужной вам версией EF Core. Например, поставщики баз данных для версии 1.0 не совместимы с версией 2.0 среды выполнения EF Core.
Сторонние поставщики EF Core обычно не выпускают исправления вместе со средой выполнения EF Core. Чтобы обновить приложение, использующее сторонний поставщик, до версии исправления EF Core, может потребоваться добавить прямую ссылку на отдельные компоненты EF Core, такие как Microsoft.EntityFrameworkCore и Microsoft.EntityFrameworkCore.Relational.
Entity Framework состоит из средств EF для Visual Studio и среды выполнения EF.
Средства EF для Visual Studio
Entity Framework Tools для Visual Studio включают в себя конструктор ef и мастер моделей ef и необходимы для первой базы данных и моделирования первых рабочих процессов. Средства EF включены во все последние версии Visual Studio. при выполнении выборочной установки Visual Studio необходимо убедиться, что выбран пункт "Entity Framework 6 инструментов", выбрав рабочую нагрузку, содержащую ее, или выбрав ее в качестве отдельного компонента.
в некоторых прошлых версиях Visual Studio обновленные средства EF доступны для загрузки. сведения о том, как получить последнюю версию средств EF, доступных для вашей версии Visual Studio, см. в статье Visual Studio версии .
Среда выполнения EF
последняя версия Entity Framework доступна в качестве пакета NuGet EntityFramework. если вы не знакомы с NuGet диспетчер пакетов, рекомендуем ознакомиться с NuGet обзором.
установка пакета EF NuGet
вы можете установить пакет EntityFramework, щелкнув правой кнопкой мыши папку references проекта и выбрав пункт управление пакетами NuGet.
установка из консоли диспетчер пакетов
кроме того, можно установить EntityFramework, выполнив следующую команду в консоли диспетчер пакетов.
Установка определенной версии EF
Обратите внимание, что представляет конкретную версию EF для установки. Например, 6.2.0 — это версия Number для EF 6,2.
Установка последней предварительной версии
Приведенные выше методы предоставляют последнюю полностью поддерживаемую версию Entity Framework. Часто доступны предварительные версии Entity Framework, которые мы будем рады получить, и поделитесь с нами.
чтобы установить последнюю предварительную версию EntityFramework, можно выбрать параметр включить предварительные выпуски в окне управление пакетами NuGet. Если предварительные версии недоступны, вы автоматически получите последнюю версию Entity Framework, полностью поддерживаемую.
кроме того, можно выполнить следующую команду в консоли диспетчер пакетов.
Курс состоит из нескольких частей:
В качестве примера будем расматривать уже ставшее классическим — приложение списка дел. Для разработки приложения я буду использовать Visual Studio 2019(в Visual Studio 2017 процесс аналогичен).
Создание проекта
Назовем приложение и укажем путь к каталогу с проектом:
И выберем шаблон приложения API:
Модель
Создадим каталог Models и в новый каталог добавим первый класс TodoItem.cs, объекты которого будут описывать некоторые задачи списка дел в приложении:
В качестве СУБД мы будем использовать Sql Server, а доступ к базе данных будет осуществляться через Entity Framework Core и для начала установим фреймворк через встроенный пакетный менеджер NuGet:
Одним из подходов в работе с Entity Framework является подход «Code-First». Суть подхода заключается в том, что на основе модели приложения(в нашем случае модель представляет единственный класс — TodoItem.cs) формируется струткура базы данных(таблицы, первичные ключи, ссылки), вся эта работа происходит как бы «за кулисами» и напрямую с SQL мы не работаем. Обязательным условием класса модели является наличие поля первичного ключа, по умолчанию Entity Framework ищет целочисленное поле в имени которого присутствует подстрока «id» и формирует на его основе первичный ключ. Переопределить такое поведение можно с помощью специальных атрибутов или используя возможности Fluent API.
Главным компонентом в работе с Entity Framework является класс контекста базы данных, через который собственно и осуществляется доступ к данным в таблицах:
Базовый класс DbContext создает контекст БД и обеспечивает доступ к функциональности Entity Framework.
Для хранения данных приложения мы будем использовать SQL Server 2017 Express. Строки подключения хранятся в файле JSON под названием appsettings.json:
Далее нужно внести изменения в класс Startup.cs, добавив в метод ConfigureServices() следующий код:
Метод AddDbContext() настраивает службы, предоставляемые инфраструктурой Entity Framework Core для класса контекста базы EFTodoDBContext. Аргументом метода AddDbContext () является лямбда-выражение, которое получает объект options, конфигурирующий базу данных для класса контекста. В этом случае база данных конфигурируется с помощью метода UseSqlServer() и указания строки подключения.
Определим основные операции для работы с задачами в интерфейсе ITodoRepository:
Данный интерфейс позволяет нам не задумываться о конкретной реализации хранилища данных, возможно мы точно не определились с выбором СУБД или ORM фреймворком, сейчас это не важно, класс описывающий доступ к данным будет наследовать от этого интерфейса.
Реализуем репозиторий, который как уже сказано ранее, будет наследовать от ITodoRepository и использовать в качестве источника данных EFTodoDBContext:
Контроллер
Добавим в каталог Controllers класс TodoController.cs со следующим содержимым:
В своем конструкторе контроллер получает ссылку на объект типа ITodoRepository, но пока что инфраструктура MVC не знает, какой объект подставить при создании контроллера. Нужно создать сервис, который однозначно разрешит эту зависисмость, для этого внесем некотрые изменения в класс Startup.cs, добавив в метод ConfigureServices() следующий код:
Метод AddTransient() определяет сервис, который каждый раз, когда требуется экземпляр типа ITodoRepository, например в контроллере, создает новый экземпляр класс EFTodoRepository.
Полный код класса Startup.cs:
Миграции
Для того чтобы Entity Framework сгенерировал базу данных и таблицы на основе модели, нужно использовать процесс миграции базы данных. Миграции — это группа команд, которая выполняет подготовку базы данных для работы с Entity Framework. Они используются для создания и синхронизации базы данных. Команды можно выполнять как в консоли диспетчера пакетов (Package Manager Console), так и в Power Shell(Developer Power Shell). Мы будем использовать консоль диспетчера пакетов, для работы с Entity Framework потребуется установить пакет Microsoft.EntityFrameworkCore.Tools:
Запустим консоль диспетчера пакетов и выполним команду Add-Migration Initial:
В проекте появится новый каталог — Migrations, в котором будут хранится классы миграции, на основе которых и будут создаваться объекты в базе данных после выполнения команды Update-Database:
Web API готово, запустив приложение на локальном IIS Express мы можем протестировать работу контроллера.
Тестирование WebAPI
Создадим новую коллекцию запросов в Postman под названием TodoWebAPI:
Метод Create() после успешного создания задачи перенаправляет запрос на метод Get() с псевдонимом «GetTodoItem» и передает в качестве параметра Id только что созданной задачи, в результате чего в ответ на запрос мы получим созданный объект задачи в формате JSON.
На этом все, в следующей части реализуем пользовательский интерфейс с помощью JavaScript-фреймворка Angular.
-
или Visual Web Developer Express 2010 SP1 (если вы используете для установки одну из этих ссылок, следующий софт установится автоматически)
The Contoso University
Приложение, которые вы разработаете, является простым вебсайтом университета.
Пользователи смогут просматривать и обновлять данные о студентах, курсах и преподавателях. Несколько скриншотов того, что получится, ниже.
UI близок по стилю к тому, что генерируется шаблонами по умолчанию, поэтому акцент будет на вопросах использования Entity Framework.
Подходы к разработке с Entity Framework
Исхоя из диаграммы, имеется три подхода к работе с данными в Entity Framework: Database First, Model First, и Code First.
Database First
В случае уже имеющейся базы данных Entity Framework может автоматически создать модель данных, состоящую из классов и свойств, соответствующих объектам базы даных (таким, как таблицы и столбцы). Информация о структуре базы (store schema), модель данных (conceptual model) и маппинг их друг на друга содержится в XML в файле .edmx. Visual Studio предоставляет графический дизайнер Entity Framework, с помощью которого можно просматривать и редактировать .edmx. Части Getting Started With the Entity Framework и Continuing With the Entity Framework в материалах о Web Forms используют подход Database First.
Model First
Если базы нет, вы можете начать с создания модели данных, используя дизайнер Entity Framework Visual Studio. После окончания работ над моделью дизайнер сгенерирует DDL (data definition language)-код для создания базы. В этом подходе для хранения информации о модели и маппингах также используется .edmx. What's New in the Entity Framework 4 включает небольшой пример разработки с использованием данного подхода.
Code First
Вне зависимости от наличия базы вы можете вручную написать код классов и свойств, соответствующих сущностям в базе и использовать этот код с Entity Framework без использования файла .edmx. Именно поэтому можно порой увидеть, как этот подход называют code only, хотя официальное наименование Code First. Маппинг между store schema и conceptual model в represented by your code is handled by convention and by a special mapping API. Если базы ещё нет, Entity Framework может создать, удалить или пересоздать её в случае изменений в модели.
API доступа к данным, разработанное для Code First, основано на классе DbContext . API может быть использован также и в процессе разработки с подходами Database First и Model First. Для дополнительной информации смотрите When is Code First not code first? В блоге команды разработки Entity Framework.
POCO (Plain Old CLR Objects)
По умолчанию для подходов Database First и Model First классы модели данных наследуются от EntityObject, который и предоставляет функциональность Entity Framework. Это значит, что эти классы не являются persistence ignorant и, таким образом, не полностью соответствуют одном из условий domain-driven design. Все подходы к разработке с Entity Framework также могут работать с POCO (plain old CLR objects), что, в целом, значит, что они являются persistence-ignorant из-за отсутствия наследования EntityObject .
Создание веб-приложения MVC
Настройка стилей
Несколько небольших поправок изменят меню сайта, расположение элементов и домашнюю страницу.
Для настройки меню Contoso University, в Views\Shared\_Layout.cshtml замените текст в h 1 и ссылки в меню, как в примере:
В Views\Home\Index.cshtml удалите всё в теге h2 .
В Controllers\HomeController.cs замените "Welcome to ASP.NET MVC!" на "Welcome to Contoso University!"
В Content\Site.css для смещения меню влево совершите следующие изменения:
Создание модели данных
Далее создадим первые классы-сущности для Contoso University. Мы начнём со следующих трёх сущностей:
Установлена связь один-ко-многим между сущностями Student и Enrollment , и связь один-ко-многим между Course и Enrollment . Другими словами, студент может посещать любое количество курсов, и курс может иметь любое количество студентов, посещающих его.
В дальнейшем вы создадите классы для каждой из этих сущностей.
Note: компиляция проекта без созданных классов для этих сущностей вызовет ошибки компиляторов.
Сущность Student
В папке Models создайте Student.cs и замените сгенерированный код на:
Свойство StudentID будет первичным ключом соответствующей таблицы. По умолчанию, Entity Framework воспринимает свойство с ID или classname ID как первичный ключ.
Свойство Enrollments — navigation property. Navigation properties содержат другие сущности, относящиеся к текущей. В данном случае свойство Enrollments содержит в себе все сущности Enrollment , ассоциированные с текущей сущностью Student . Другими словами, если некая запись Student в базе данных имеет связь с двумя записями Enrollment (записей, содержащих значения первичных ключей для студента в поле внешнего ключа StudentID ), свойство этой записи Enrollments будет содержать две сущности Enrollment .
Navigation properties обычно помечаются модификатором virtual дабы использовать возможность Entity Framework, называемую lazy loading. (суть Lazy loading будет объяснена позже, в Reading Related Data) Если navigation property может содержать несколько сущностей (в связях многие-ко-многим и один-ко-многим), его тип должен быть ICollection .
Сущность Enrollment
В папке Models создайте Enrollment.cs со следующим содержанием:
Знак вопроса после указания типа decimal указывает на то, что свойство Grade nullable. Оценка, поставленная в null отличная от нулевой оценки— null обозначает то, что оценка еще не выставлена, тогда как 0 – уже значение.
Свойство StudentID является внешним ключом, и соответствующее navigation property Student . Сущность Enrollment ассоциирована с одной сущностью Student , поэтому свойство может содержать только одну сущность указанного типа (в отличие Student . Enrollments ).
Свойство CourseID является внешним ключом, и соответствующее navigation property Course . Сущность Enrollment ассоциирована с одной сущностью Course .
Сущность Course
В папке Models создайтеCourse.cs со следующим содержанием:
Свойство Enrollments — navigation property. Сущность Course может ассоциироваться с бесконечным множеством сущностей Enrollment .
Создание Database Context
Главный класс, координирующий функциональность Entity Framework для текущей модели данных называется database context. Данный класс наследуется от System . Data . Entity . DbContext . В коде вы определяете, какие сущности включить в модель данных, и также можете определять поведение самого Entity Framework. В нашем коде этот класс имеет название SchoolContext .
Создайте папку DAL и в ней новый класс SchoolContext.cs:
Код создаёт свойство DbSet для каждого множества сущностей. В терминологии Entity Framework множество сущностей (entity set) относится к таблице базы данных, и сущность относится к записи в таблице.
Содержимое метода OnModelCreating защищает имена таблиц от плюрализации, и, если вы этого не делаете, то получаете такие имена таблиц, как Students , Courses , Enrollments . В ином случае имена таблиц будут Student , Course , Enrollment . Разработчики спорят на тему того, нужно ли плюрализовывать имена таблиц или нет. Мы используем одиночную форму, но важен тот момент, что вы можете выбрать, включать эту строчку в код или нет.
(Этот класс находится в namespace Models потому, что в некоторых ситуациях подход Code First подразумевает нахождение классов сущностей и контекста в одном и том же namespace.)
Определение Connection String
Вам не нужно определять connection string. Если вы не определили эту строку, Entity Framework автоматически создаст базу данных SQL Server Express. Мы, однако, будем работать с SQL Server Compact, и вам необходимо будет создать строку подключения с указанием на это.
Откройте Web.config и добавьте новую строку подключения в коллекцию connectionStrings . (Убедитесь, что вы обновляете Web.config в корне проекта, так как есть еще один Web.config в папке Views, который трогать не надо.)
По умолчанию Entity Framework ищет строку подключения, названную также как object context class. Строка подключения, которую вы добавили, определяет базу данных School.sdf, находящуюся в папке App_data и SQL Server Compact.
Инициализация базы данных с тестовыми данными
Entity Framework может автоматически создать базу данных при запуске приложения. Вы можете указать, что это должно выплоняться при каждом запуске приложения или только тогда, когда модель рассинхронизирована с существующей базой. Вы можете также написать класс с методом, который Entity Framework будет автоматически вызывать перед созданием базы для использования её с тестовыми данными. Мы укажем, что база должна удаляться и пересоздаваться при изменении модели.
В папке DAL создайте новый класс SchoolInitializer.cs с кодом, с помощью которого база будет создана при необходимости и заполнена тестовыми данными.
Метод Seed принимает объект контекста базы как входящий параметр и использует его для добавления новых сущностей в базу. Для каждого типа сущности код создает коллекцию новых сущностей, добавляя их в соответствующее свойство DbSet, и потом сохраняет изменения в базу. Нет необходимости в вызове SaveChanges после каждой группы сущностей, как сделано у нас, но это помогает определить проблему в случае возникновения исключений.
Измените Global.asax.cs для того, чтобы наш код вызывался при каждом запуске приложения:
- Добавьте using :
- В методе Application_Start вызовите метод Entity Framework, который запускает код инициализации базы:
Note при развертывании приложения на продакшн-сервер вы должны удалить весь код, который инициализирует базу тестовыми данными.
Далее вы создадите веб-страницу для отображения данных, и процесс запроса данных автоматически инициирует создание базы. Вы начнете с нового контроллера, но перед этим, соберите проект для того, чтобы модель и контекстные классы стали доступны для MVC controller scaffolding.
Создание контроллера Student
Для создание контроллера Student , щелкните на папке Controllers в Solution Explorer, нажмите Add, Controller. В Add Controller совершите следующие действия и изменения и нажмите Add:
- Controller name: StudentController.
- Template: Controller with read/write actions and views, using Entity Framework. (по умолчанию.)
- Model class: Student (ContosoUniversity.Models). (если этого нет, пересоберите проект)
- Data context class: SchoolContext (ContosoUniversity.Models).
- Views: Razor (CSHTML). (по умолчанию)
Откройте Controllers\StudentController.cs, вы увидите созданную переменную, инициализирующую объект контекста базы данных:
Действие Index собирает список студентов из свойства Students из экземпляра контекста базы данных:
Автоматическое scaffolding было создано для множества Student . Для настройки заголовков и последовательности колонок откройте Views\Student\Index.cshtml и замените код на:
Запустите сайт, нажмите на вкладку Students.
Закройте браузер. В Solution Explorer выберите проект ContosoUniversity. Нажмите Show all Files, Refresh и затем разверните папку App_Data.
Два раза щелкните на School.sdf для открытия Server Explorer, и Tables.
Note если у вас возникает ошибка после того, как вы два раза щелкаете на School.sdf, убедитесь, что вы установили Visual Studio 2010 SP1 Tools for SQL Server Compact 4.0. Если все установлено, перезапустите Visual Studio.
Для каждой таблицы есть свое множество сущностей + одна дополнительная таблица. EdmMetadata используется для определения Entity Framework, когда случилась разсинхронизация модели и базы.
Щелкните на одной из таблиц и Show Table Data чтобы увидеть загруженные классом SchoolInitializer данные.
Закройте подключение, иначе может возникнуть проблема с запуском приложения.
Соглашения
Количество кода, нужное для создания Entity Framework базы, минимально из-за использования (conventions) Entity Framework. Некоторые из них уже были упомянуты:
- Форма множественного числа имен классов сущностей используется в качестве имен таблиц.
- Имена свойств сущностей используется в качестве имен столбцов.
- Свойства сущностей с именами ID или classname ID распознаются как первичные ключи.
- Entity Framework подключается к базе, отыскав строку подключения с таким же именем, как и класс контекста (в данном случае SchoolContext ).
Вы создали простое приложение с использованием Entity Framework и SQL Server Compact для хранения и отображения данных. Далее мы научимся совершать простые CRUD (create, read, update, delete) операции.
Читайте также: