Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle ODP.Net mit Entity Framework 6 – ORA-00955 bei Auswahl aus Tabellenansicht

Die Oracle-Implementierung des Entity-Framework-Anbieters ist sehr schlecht, aber es gibt einige Möglichkeiten, dies zum Laufen zu bringen.

  1. 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.

  1. 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 aus ALL_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.