预言机中的多个实体框架 6 上下文抛出 ORA-00955



我正在使用实体框架 6.1.3 连接到 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()而不是初始化,但收到相同的错误。 我尝试Database.SetInitializer<context>(null);设置这两个上下文,因为此时我不需要迁移。 但这似乎也行不通。

理想情况下,我想保留__MigrationHistory表,并在 Oracle 中初始化我的两个上下文。 但这不是必需的。 我可以感觉到自己在试图找出所有这些变通方法,当我看到它们时,对于在SQL Server中工作的东西来说,它们似乎过于复杂。

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

好吧,无论好坏,这就是我要做的解决方法。 我的问题似乎是两个上下文之间共享表MigrationHistory

实体框架 6 允许您使用System.Data.Entity.Migrations.History命名空间(Migrations.History 命名空间)操作迁移表。

因此,我打开迁移表,复制所有历史记录行,删除迁移表,执行第二次上下文初始化,然后将历史记录行复制回迁移数据库(在第二次上下文初始化期间创建)。

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

最新更新