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();
}
}
我正在使用 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();
}
}