В данном примере рассматривается использование расширение Visual Studio для создания классов модели из существующнй БД.
Вы можете попробывать и стандартный подход - Реконструирование спомощью команды Диспечера пакетов (PMC) Scaffold-DbContext
, не забудьте при этом указать также ключ -DataAnnotations
, для формирования анатаций к данным. Подробнее можно посмотреть в видео ▶ Working with an Existing Database [2 of 5].
В моём случае, это не сработало - возникала ошибка при подключении к БД. Предлагаемый ниже способ дал требуемый результат.
Этот подход можно использовать для любых типов веб-приложений: Razor Pages, MVC, Консольное приложение.
Как начать работать с консольным приложением, смотрите в этом видео: ▶ Getting Started with Entity Framework Core [1 of 5] (есть субтитры на русском)
- Установите расширение EF Core Power Tools
- Установите компонент редактор DGML. Для этого запустите стандартный установщик Visual Stiudio, перейдите на вкладку Отдельные компоненты, и в строке поиска наберите
dgml
- Создание копии БД.
Для этого будем использовать ранее созданныей проект ConsotoUniversity. В нем, в файле appsettings.json в строке подключение изменим имя базы с на ConsotoDbFirst:
"ConnectionStrings": {
"SchoolContext": "Server=(localdb)\\mssqllocaldb;Database=ConsotoDbFirst;Trusted_Connection=True;MultipleActiveResultSets=true"
}
и выполним в консоле диспечера пакетов (PMC) команду Update-Database
. В созданнной БД удалим таблицу отслеживания миграций __EFMigrationsHistory
.
- Создайте проект Razor Pages с названием
ConsotoDbFirst
Добавьте в проект необходимые пакеты NuGet:
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Tools
Ранее мы установили расширение EF Core Power Tools, теперь пора им воспользоваться. Шёлкаем правой кнопкой мыши на проекте, и в открывшемся списке выбираем: EF Core Power Tools
затем Reverse Engineer
:
В маленьком окошке нам предлагается добавить соединение с БД, нажимаем кнопку Add...
Это стандартное окно подключения к БД, выбираем нашу БД, и OK
. Возвращаемся первоначальному окошку, и ставим галочку Use Ef Core 3.x
:
Далее появится окошко, где можно выбрать все таблицы (или некоторые), снова OK
и открывается окно параметров создания модели из БД:
Здесь задаем необходимые каталога Model и Data, ставим галочку для анотации данных. После нажатия OK
происходит реконструирование данных.
Для отображения модели нам надо прописать строки подключения для проекта, сначала добавим строку подключения в appsettings.json
"ConnectionStrings": {
"SchoolContext": "Server=(localdb)\\mssqllocaldb;Database=ConsotoDbFirst;Trusted_Connection=True;MultipleActiveResultSets=true"
}
затем в файле Startup.cs добавим в метод ConfigureServices строку подключения и необходимые пространства имен:
using Microsoft.EntityFrameworkCore;
using ConsotoDbFirst.Data;
------------------------
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
//строка подключения:
services.AddDbContext<ConsotodbfirstContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("SchoolContext")));
}
Теперь мы можем отобразить схему модели, для этого щёлкните правой кнопкой мыши на проект, в выпадающем списке выберите EF Core Power Tools затем Add DbContext Model Diagramm
В проекте появится xml файл который хранит схему отображения данных ConsotodbfirstContext.dgml
Мы также можем отоброзить схему из классов модели, без соединения с БД. Рассмотрим данный случай для консольного приложения.
В каталоге Data находится файл контекста (наследует от : DbContext), этом файле замените метод OnConfiguring
на следующий код:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Data Source=base"); //заменитель строки подключения
base.OnConfiguring(optionsBuilder);
}
}
Теперь запустите построитель модели, как в предыдущем примере. Схема будет создана на основе классов в модели приложения.
(слово base в коде, может быть заменено на любое.)
В процессе разработки, вам может понадобится изменить какие то таблицы, добавить новые, изменить связи. Моё мнение, не стоит для этого применять миграции, кто даст гаранитии, что не будет сбоев, и ваши драгоценные данные не будут потеряны? Лучше использовать максимально безопасный метод. Для этого сделайте изменения прям в БД, а потом снова реконструируйте измененные таблицы, можно для этого использовать другую папу модели, а потом согласовать исходный код.
Практические консультации вы можете получить на наших веб курсах в Сочи, Адлер: