Фреймворк нескольких сущностей 6 контекстов в оракуле ORA-00955 - PullRequest
0 голосов
/ 12 июня 2019

Я использую Entity Framework 6.1.3 для подключения к базе данных Oracle.

Я пытаюсь использовать несколько контекстов с одним и тем же schemaName для oracle. Но когда я создаю контексты, оказывается, что они разделяют таблицу __MigrationHistory, а когда второй контекст пытается создать себя, он выдает « ORA-00955: имя уже используется существующим объектом ». Чтобы прояснить два контекста, я попытался разделить их по дизайну домена и не делить между ними никаких сущностей.

Это код, который я пытаюсь запустить, и он отлично работает, когда я запускаю его на SQL Server. Но Oracle выдает ошибку ORA-00955.

try
{
    using (var hContext = new HContextORCL(connectionString, "SchemaName"))
    using (var aContext = new AContextORCL(connectionString, "SchemaName"))
    {
        hContext.Database.Initialize(true);
        aContext.Database.Initialize(true);
    }
}

Я попытался использовать CreateIfNotExists() вместо Initialize, но получил ту же ошибку. Я попытался установить оба контекста Database.SetInitializer<context>(null);, потому что на данный момент мне не нужны миграции. Но это тоже не сработает.

В идеале я хотел бы сохранить таблицу __MigrationHistory и инициализировать оба моих контекста в Oracle. Но это не обязательно. Я чувствую, что схожу с пути, пытаясь выяснить все эти обходные пути, которые, когда я на них смотрю, кажутся слишком сложными для чего-то, что работает в SQL Server.

Я в недоумении, как инициализировать два контекста с одним и тем же именем схемы в базе данных оракула. ​​

1 Ответ

0 голосов
/ 18 июня 2019

Хорошо, хорошо это или плохо, но я работаю над этим. Моя проблема в том, что таблица MigrationHistory разделена между двумя контекстами.

Entity Framework 6 позволяет вам манипулировать таблицей миграции, используя пространство имен System.Data.Entity.Migrations.History ( Migrations.History Namespace ).

Итак, я открываю таблицу миграции, копирую все строки истории, удаляю таблицу миграции, выполняю мою вторую инициализацию контекста и копирую строки истории обратно в базу данных миграции (созданную во время инициализации второго контекста).

try
{
    var dbConnection = new OracleConnection(connectionString);
    using (var migrationContext = new Migrations.History.HistoryContext(dbConnection, "SchemaName"))
    using (var hContext = new HContextORCL(connectionString, "SchemaName"))
    using (var aContext = new AContextORCL(connectionString, "SchemaName"))
    {
        hContext.Database.Initialize(true);

        List<HistoryRow> currentHistory = migrationContext.History.ToList();
        migrationContext.Database.Delete();

        aContext.Database.Initialize(true);

        currentHistory.ForEach(rowItem => migrationContext.History.Add(rowItem));
        migrationContext.SaveChanges();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...