Attualmente sto lavorando su un'app .Net Core utilizzando EF Core Code First Migrations. Sto saltando tra Windows e OS X per fare il mio sviluppo (Windows a casa, Mac on the go) e sto cercando di capire come posso usare le migrazioni di database per SQL Server quando sono su Windows e SQLite quando sul mio Mac.
È possibile mantenere due serie di migrazioni e selezionare quale serie applicare (senza specificare ciascuna migrazione singolarmente)? O dovrei creare delle applicazioni / assiemi Core .Net separati e specificare l'opzione --assembly
per il comando di dotnet ef database update
?
Hai due opzioni:
Ogni set deve essere nel proprio assembly. Per iniziare, genera la prima migrazione e spostala in un nuovo progetto. Configurerai l'assembly di migrazione quando hai configurato il provider.
optionsBuilder.UseSqlServer(
mssqlConnectionString
, x => x.MigrationsAssembly("MyApp.Migrations.SqlServer"));
//optionsBuilder.UseSqlite(
// sqliteConnectionString,
// x => x.MigrationsAssembly("MyApp.Migrations.Sqlite"));
Ho un esempio che mette le migrazioni nel proprio assembly che potresti anche voler usare come riferimento.
Per rendere il fornitore di servizi di migrazione-indipendente, unire ciò che ciascun provider genererebbe. Ad esempio, quanto segue ha annotazioni per SQL Server e SQLite.
migrationBuilder.CreateTable(
name: "People",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("Sqlite:Autoincrement", true)
.Annotation("SqlServer:ValueGenerationStrategy",
SqlServerValueGenerationStrategy.IdentityColumn)
},
constraints: table =>
{
table.PrimaryKey("PK_People", x => x.Id);
});