Skip to content

Latest commit

 

History

History
122 lines (99 loc) · 8.89 KB

ConsotoDbFirst.md

File metadata and controls

122 lines (99 loc) · 8.89 KB

← EF Core

EF Core Database First

В данном примере рассматривается использование расширение 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

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

  "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 в коде, может быть заменено на любое.)

Обновление БД

В процессе разработки, вам может понадобится изменить какие то таблицы, добавить новые, изменить связи. Моё мнение, не стоит для этого применять миграции, кто даст гаранитии, что не будет сбоев, и ваши драгоценные данные не будут потеряны? Лучше использовать максимально безопасный метод. Для этого сделайте изменения прям в БД, а потом снова реконструируйте измененные таблицы, можно для этого использовать другую папу модели, а потом согласовать исходный код.



Практические консультации вы можете получить на наших веб курсах в Сочи, Адлер: