Oracle.ManagedDataAccess.EntityFramework - ORA-01918:用户'dbo'不存在 [英] Oracle.ManagedDataAccess.EntityFramework - ORA-01918: user 'dbo' does not exist
问题描述
我正在尝试使用Oracle.ManagedDataAccess 6.121.1.0提供程序实现代码第一次迁移,但根本没有成功。
I am trying to implemente code First Migrations with Oracle.ManagedDataAccess 6.121.1.0 provider, but with no success at all.
当我收到一个ORA代码,我假设连接已成功打开。但是迁移是失败的,因为可能,提供程序表现为SQL Server,而不是Oracle。我认为这是托盘使用'dbo'作为默认模式。
As I am receiving a ORA-code, I am assuming that the connection are been opened successfully. But the Migrations are failing because, maybe, the provider are behaving as a SQL Server, instead of Oracle. I think that beacause it is traying to use 'dbo' as default schema.
这是我的web.config设置:
Here is my web.config settings:
<configuration>
<configSections>
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
<section name="Oracle.ManagedDataAccess.Client"
type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
<entityFramework>
<contexts>
<context type="MyProject.Context.MainContext, MyProject.Context">
<databaseInitializer type="MyProject.Context.Config.ContextInitializer, MyProject.Context" />
</context>
</contexts>
<defaultConnectionFactory type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess" />
<providers>
<provider invariantName="Oracle.ManagedDataAccess.Client"
type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver"
invariant="Oracle.ManagedDataAccess.Client"
description="Oracle Data Provider for .NET, Managed Driver"
type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="MainContext"
providerName="Oracle.ManagedDataAccess.Client"
connectionString="Data Source=OracleServer:1521/BRSYSDS;User ID=USER;Password=PASSWORD;" />
</connectionStrings>
<!-- other settings -->
</configuration>
这里的Stacktrace:
Here the Stacktrace:
[OracleException(0x77e):ORA-01918:用户'dbo'不存在]
OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl,Int32& cursorId,Boolean bThrowArrayBindRelatedErrors,OracleException& exceptionForArrayBindDML,Boolean& hasMoreRowsInDB,Boolean bFirstIterationDone)+652
OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl,Int32& cursorId,Boolean bThrowArrayBindRelatedErrors,OracleException& exceptionForArrayBindDML,Boolean bFirstIterationDone)+39
OracleInternal .ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText,OracleParameterCollection paramColl,CommandType commandType,OracleConnectionImpl connectionImpl,Int32 longFetchSize,Int64 clientInitialLOBFS,OracleDependencyImpl orclDependencyImpl,Int64 []& scnFromExecutio n,OracleParameterCollection& bindByPositionParamColl,Boolean& bBindParamPresent,OracleException& exceptionForArrayBindDML,Boolean isFromEF)+7480
Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery()+678
System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.b__0(DbCommand t ,DbCommandInterceptionContext1 c)+10
1.Dispatch(TTarget target,Func
System.Data.Entity.Infrastructure.Interception.InternalDispatcher3操作,TInterceptionContext interceptionContext,Action
3执行,Action3执行)+72
1 migrationStatements,DbTransaction事务,DbInterceptionContext interceptionContext)+82
System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher。 NonQuery(DbCommand命令,DbCommandInterceptionContext interceptionContext)+357
System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()+104
System.Data.Entity.Migrations.DbMigrator.ExecuteSql (DbTransaction事务,MigrationStatement migrationStatement,DbInterceptionContext interceptionContext)+152
System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(I Enumerable
System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable1 migrationStatements,DbConnection连接)+626
1 migrationStatements,DbTransaction existingTransaction)+194
System.Data.Entity.Migrations。 c__DisplayClass30。< ExecuteStatements> b__2e()+19
System.Data.Entity.Infrastructure.DefaultExecutionStrategy。执行(动作操作)+9
System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable
系统.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable1 migrationStatements)+7
1操作,IEnumerable
System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId,XDocument targetModel,IEnumerable1 systemOperations,Boolean downgrading,Boolean auto)+825
1 pendingMigrations,String targetMigrationId ,String lastMigrationId)+404
System.Data.Entity.Migrations.DbMigrat or.AutoMigrate(String migrationId,VersionedModel sourceModel,VersionedModel targetModel,Boolean downgrading)+564
System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable
System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)+447
System.Data.Entity.Migrations。<> c__DisplayClassc。 b__b()+13
System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)+422
System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration )+78
System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext,Func3 createMigrator,ObjectContext objectContext)+89
1.InitializeDatabase(TContext context)+137
System.Data .Entity.Internal.InternalContext.CreateDatabase(ObjectContext objectContext,DatabaseExistenceState existsState)+116
System.Data.Entity.Database.Create(Databas eExistenceState existsState)+218
System.Data.Entity.DropCreateDatabaseAlways
[OracleException (0x77e): ORA-01918: user 'dbo' does not exist]
OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone) +652 OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean bFirstIterationDone) +39
OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, OracleException& exceptionForArrayBindDML, Boolean isFromEF) +7480
Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery() +678
System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.b__0(DbCommand t, DbCommandInterceptionContext1 c) +10
1.Dispatch(TTarget target, Func
System.Data.Entity.Infrastructure.Interception.InternalDispatcher3 operation, TInterceptionContext interceptionContext, Action
3 executing, Action3 executed) +72
1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext) +82
System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext) +357
System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery() +104
System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement, DbInterceptionContext interceptionContext) +152
System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable
System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable1 migrationStatements, DbConnection connection) +626
1 migrationStatements, DbTransaction existingTransaction) +194
System.Data.Entity.Migrations.<>c__DisplayClass30.<ExecuteStatements>b__2e() +19
System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute(Action operation) +9
System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable
System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable1 migrationStatements) +7
1 operations, IEnumerable
System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable1 systemOperations, Boolean downgrading, Boolean auto) +825
1 pendingMigrations, String targetMigrationId, String lastMigrationId) +404
System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading) +564
System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable
System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) +447
System.Data.Entity.Migrations.<>c__DisplayClassc.b__b() +13
System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) +422
System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) +78
System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func3 createMigrator, ObjectContext objectContext) +89
1.InitializeDatabase(TContext context) +137
System.Data.Entity.Internal.InternalContext.CreateDatabase(ObjectContext objectContext, DatabaseExistenceState existenceState) +116
System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) +218
System.Data.Entity.DropCreateDatabaseAlways
推荐答案
我有同样的问题,由Thiago Lunardi的回答解决。谢谢。我没有足够的声誉来表决你的回应。在这里提到,在UPPERCASE中设置我的模式名称后,我成功了。
I had the same problem and it was resolved by Thiago Lunardi's response. Thank you. I didn't have enough reputation to vote up your response. To mention here, I succeeded after setting my schema name in UPPERCASE.
将它放在您的新的dbContext类的上下文文件中,如下所示:
Put this in your Context file under your new dbContext class, like this:
public partial class MyAppContext : DbContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("UPPERCASE_SCHEMA_NAME");
...
这篇关于Oracle.ManagedDataAccess.EntityFramework - ORA-01918:用户'dbo'不存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!