Frage Schließen Sie DbContext von Migrationen aus, um Context-Parameter zu vermeiden


Ich verwende ASP.NET EF Core mit MySQL (Pomelo.EntityFrameworkCore.MySql-Treiber). Da ein solcher Kontext einige Zeilen spezifischer Konfiguration benötigt, die der Standard DbContext mit MSSQL nicht hat, habe ich einen MySqlContext erstellt:

public class MySqlContext : DbContext {
    string connectionString;
    // ...
}

Also werden alle meine DbContexte von diesen Klassen geerbt:

public class MyDbContext: MySqlContext {
    public DbSet<MyModel> MyModels{ get; set; }
    // ...
}

In meinem Projekt habe ich derzeit einen Kontext (DbContext), der DbSets enthält. Und der MySqlContext, der kein echter Kontext ist, weil er keine DbSets hat und nur als Wrapper für die MySQL-Konfiguration dient, damit ich sie besser wiederverwenden kann.

Aber es scheint, dass die Migrationen sie als zwei verschiedene Kontexte sehen werden, wenn ich eine Migration über den Befehl hinzufüge Add-Migration Test Ich habe den Fehler bekommen

Mehr als ein DbContext wurde gefunden. Geben Sie an, welches Sie verwenden möchten. Verwenden Sie den Parameter '-Kontext' für PowerShell-Befehle und den Parameter '-Kontext' für dotnet-Befehle.

Also bei jeder Migration muss ich hinzufügen -Context MyContext zum Befehl. Ich möchte das vermeiden, denn wie gesagt, der zweite MySqlContext ist kein realer Kontext, der Modelle und Migrationen enthält. Gibt es eine Möglichkeit, dem Migrationstool das mitzuteilen? Ich brauche etwas wie das [NotMapped] -Attribut für EF-Modelle, das EF sagt: Diese Eigenschaft nicht in der Datenbank speichern. So muss ich EF mitteilen: Ignoriere die MySqlContext-Klasse, da sie keine Migrationen benötigt.


5
2017-08-27 17:09


Ursprung


Antworten:


Machen Sie die Basisklasse abstrakt:

public abstract class MySqlContext : DbContext {
    string connectionString;
    // ...
}

5
2017-08-27 21:12



Das Use-DbContext MyContext Befehl wird gesetzt MyContext als Standardkontext für Ihre PowerShell-Sitzung. Dies ist eine weitere Möglichkeit, die Angabe zu vermeiden -Context jedes Mal.


2
2017-08-29 15:49