Die Oracle-Implementierung des Entity-Framework-Anbieters ist sehr schlecht, aber es gibt einige Möglichkeiten, dies zum Laufen zu bringen.
-
Einfach, aber lästig - Verwendung von NULL oder eigener Implementierung des Datenbankinitialisierers:
Database.SetInitializer<DatabaseContext>(null);
oder
class DatabaseInitializer : IDatabaseInitializer<DatabaseContext>
{
public void InitializeDatabase(DatabaseContext context)
{
// your implementation
}
}
Database.SetInitializer(new DatabaseInitializer());
Setzen Sie die Initialisierung vor dem ersten Zugriff auf Ihre Datenbank.
- Wenn Sie Migrationen verwenden möchten, erstellen Sie Ihre Ansichten und fügen Sie dann die Migration hinzu, wobei Sie die Änderungen ignorieren, zum Beispiel mit der Paketkonsole
add-migration initial -ignorechanges
. Dadurch ignoriert EF die Inkonsistenzen zwischen dem DB-Schema und dem Modell (weil es nur Tabellen ausALL_TABLES
prüft , nicht Ansichten), sodass nicht versucht wird, eine Tabelle zu erstellen. Es gibt einen Fehler in der Oracle EF-Implementierung, dass, wenn die anfängliche Migration leer ist, die__MigrationHistory
gelöscht und neu erstellt wird table, also muss entweder Ihre anfängliche Migration mindestens eine Tabelle enthalten, bevor Sie die View-Migration hinzufügen, oder Sie müssen danach eine Tabelle hinzufügen.