У меня есть EF Core Application (с использованием WPF, C #), который я могу прекрасно создавать и запускать как разработчик.У меня нет проблем с редактированием модели данных, созданием миграций и обновлением базы данных из консоли диспетчера пакетов.Но сейчас я пытаюсь написать установщик (оценивая различные инструменты установки), и мне интересно, что делать во время установки.
Кажется, что вся документация EF Core, которую я могу найти, касается создания базы данных исключительно с точки зрения разработчика.Но я не могу точно запустить консоль менеджера пакетов в моем исходном коде.Тем не менее, как только мое приложение установлено, база данных должна существовать.Я не знаю, как лучше использовать выходные данные, которые EF Core дает мне для создания базы данных во время установки.Каков наилучший метод?
Например, в моем проекте я вижу папку «Миграции», которую EF Core создал для меня, когда я запускал команду add-migration
из консоли PM.У него есть класс, производный от «Migration» с методом «Up», который создает таблицы в C #.
public partial class init : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "AnalysisTypes",
columns: table => new
{
Key = table.Column<string>(nullable: false),
Name = table.Column<string>(nullable: true),
Show = table.Column<bool>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AnalysisTypes", x => x.Key);
});
...etc ... etc... etc...
Это кажется , как если бы это было идеально для создания моей базы данных.Как, может быть, мне следует каким-то образом извлечь этот производный от миграции класс в отдельное консольное приложение, которое будет запускаться во время установки для создания базы данных.Обычно это делается?
Альтернативно, если я запускаю команду script-migration -idempotent
из консоли PM, я получаю сценарий SQL, который создает нужные мне таблицы.
IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL
BEGIN
CREATE TABLE [__EFMigrationsHistory] (
[MigrationId] nvarchar(150) NOT NULL,
[ProductVersion] nvarchar(32) NOT NULL,
CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
);
END;
GO
CREATE TABLE [AnalysisTypes] (
[Key] nvarchar(450) NOT NULL,
[Name] nvarchar(max) NULL,
[Show] bit NOT NULL,
CONSTRAINT [PK_AnalysisTypes] PRIMARY KEY ([Key])
);
GO
... etc ... etc... etc...
Но этот скрипт only создает таблицы.У него нет возможности подключиться к базе данных или посмотреть, существует ли она, и создать ее, если ее нет.Мне нужен более умный скрипт для
- Подключиться к нужному серверу sql
- Проверьте, существует ли база данных
- Создайте ее, если ее нет.
- Убедитесь, что его схема актуальна.
Так я должен взять этот сценарий, сгенерированный при переносе сценария, и обернуть его в какой-нибудь более крупный, который все это работает для меня?Есть какая-нибудь команда, которая сделает все это?
Полагаю, это решенная проблема в мире EF Core.Я просто ищу лучшую практику.Кто-нибудь может дать мне какое-нибудь руководство здесь?