oracle 中的多个 entity framework 6 个上下文抛出 ORA-00955

Multiple entity framework 6 contexts in oracle throw ORA-00955

我正在使用 Entity Framework 6.1.3 连接到 oracle 数据库。

我正在尝试为 oracle 使用具有相同 schemaName 的多个上下文。但是当我创建上下文时,它们似乎共享 __MigrationHistory table 并且当第二个上下文尝试创建自身时它会抛出“ORA-00955:名称已被现有对象使用”。为清楚起见,我试图按域设计拆分这两个上下文,并且不在两者之间共享任何实体。

这是我尝试 运行 的代码,当我 运行 它针对 SQL 服务器时它工作正常。但是 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 table 并在 Oracle 中初始化我的两个上下文。但这不是必需的。我可以感觉到自己正在离开 rails 试图找出所有这些解决方法,当我看到它们时,对于在 SQL 服务器中工作的东西来说似乎过于复杂。

我不知道如何在 oracle 数据库中初始化两个具有相同模式名称的上下文。

好吧,无论好坏,这都是我要解决的问题。我的问题似乎是 MigrationHistory table 在两个上下文之间共享。

Entity Framework 6 允许您使用 System.Data.Entity.Migrations.History 命名空间 (Migrations.History Namespace) 来操作迁移 table。

所以我打开迁移 table,复制所有历史行,删除迁移 table,执行我的第二次上下文初始化并将历史行复制回迁移数据库(在创建期间第二个上下文初始化)。

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();
    }
}