Talvez você queira armazenar suas migrações em um assembly diferente daquele que contém seu DbContext. Fazer isso é bem simples e deixa o seu projeto com uma organização melhor.
Crie um projeto do tipo WebApi e adicione duas ClassLibrary à ele como mostra a imagem abaixo.
A ClassLibrary MyWebApp.Data representa a camada de acesso à dados e o projeto MyWebApp.Migrations é o projeto onde os arquivos do Migration ficarão.
Dentro do projeto MyWebApp.Data crie duas classes Context.cs e DIExtensions.cs e adicione as seguinte referências via Nuget
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools
Context.cs
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Text;
namespace MyWebApp.Data
{
public class Context : DbContext
{
public Context(DbContextOptions<Context> options) : base(options)
{
}
public DbSet<Usuario> Usuario { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseSqlServer(
@"Server=.;Database=Demo.QueryFilters;Trusted_Connection=True;ConnectRetryCount=0;");
}
}
#region Entidade
public class Usuario
{
public int Id { get; set; }
public string Nome { get; set; }
public bool IsDeleted { get; set; }
}
#endregion
}
DIExtensions.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace MyWebApp.Data
{
public static class DIExtensions
{
public static void AddRepository(this IServiceCollection services)
{
services.AddDbContext<Context>(o => o.UseSqlServer(
@"Server=.;Database=Demo.QueryFilters;Trusted_Connection=True;ConnectRetryCount=0;",
x => x.MigrationsAssembly("MyWebApp.Migrations")));
}
}
}
Vá ao projeto MyWebApp (API) e referencie as duas ClassLibray, criadas anteriormente, dentro dele. Feito isso adicione o seguinte código ao método ConfigureServices
services.AddRepository();
Seu código deverá ser semelhante ao da imagem abaixo
Ainda no projeto MyWebApp adicione a seguinte dll via Nuget
Microsoft.EntityFrameworkCore.Tools
Agora vá ao projeto MyWebApp.Migrations e adicione uma referência do projeto MyWebApp.Data isso é necessário pois os arquivos do Migration que serão gerados contém referências ao Contexto e as Entidades do modelo de dados
Por fim, execute o seguinte comando no terminal Package Manager Console, do VisualStudio, para gerar os arquivos do migration
Add-Migration NewMigration -Project MyWebApp.Migrations
Dicas
O pacote Microsoft.EntityFramework.Tools é o responsável por habilitar os comando do Migration
Ao invés de especificar no comando o projeto onde os arquivos do Migration devem ser gerados, você pode selecionar o projeto de destino na janela do Package Manager Console
Fazendo isso você precisará apenas do comando abaixo para gerar seus Migrations
Add-Migration NewMigration
Comentários