Oracle.ManagedDataAccess.Entitefram framework-ORA-01918: l'utilisateur "dbo" n'existe pas
j'essaie d'implémenter les premières Migrations de code avec Oracle.ManagedDataAccess 6.121.1.0 fournisseur, mais sans aucun succès.
comme je reçois un code ORA, je suppose que la connexion a été ouverte avec succès. Mais les Migrations échouent parce que, peut-être, le fournisseur se comporte comme un serveur SQL, au lieu d'Oracle. Je pense que c'est parce que c'est traiing d'utiliser 'dbo' comme schéma par défaut.
voici ma toile.config paramètres:
<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>
Ici le Stacktrace:
[OracleException (0x77e): ORA-01918: l'utilisateur 'dbo' n'existe pas]
OracleInternal.ServiceObjects.OracleCommandImpl.Verifyexécution(OracleConnectionImpl connection, Int32 & cursorId, Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone) +652 OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId, Boolean bthrowarraybrelatederrors, OracleException & exceptionForArrayBindDML, Boolean bFirstIterationDone) + 39
OracleInternal.ServiceObjects.OracleCommandImpl.Exécutenonquery (String commandText, oracleparametercollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64 [] & scnfromexécution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, OracleException& exception forarraybinddml, Boolean isFromEF) + 7480
Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery () +678
Système.Données.Entité.Infrastructure.Interception.DbCommandDispatcher.b _ _ 0 (DbCommand t, DbCommandInterceptionContext1 c) +10
1.Dispatch(TTarget cible, Func
System.Data.Entity.Infrastructure.Interception.InternalDispatcher3 operation, TInterceptionContext interceptionContext, Action
3 exécution, Action3 executed) +72
1 statements de migration, 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
Système.Données.Entité.Migration.DbMigrator.Exécutestatsinternes (IEnumerable1 migrationStatements, DbConnection connection) +626
1 statements de migration, 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
Système.Données.Entité.Migration.DbMigrator.ExecuteStatements(IEnumerable1 migrationStatements) +7
1 opérations, IEnumerable
System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable1 systemOperations, Boolean downgrading, Boolean auto) +825
1 pendagemigrations, 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
Système.Données.Entité.Migration.DbMigrator.UpdateInternal (String targetMigration) +447
Système.Données.Entité.Migration.C__DisplayClassc.b _ _ b() +13
Système.Données.Entité.Migration.DbMigrator.Ensuredatabase existe (Action must succeed tookeepdatabase) +422
Système.Données.Entité.Migration.DbMigrator.Update (String targetMigration) + 78
Système.Données.Entité.Interne.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
6 réponses
J'ai eu le même problème et il a été résolu par la réponse de Thiago Lunardi. Remercier. Je n'avais pas assez de réputation pour voter votre réponse. Pour le mentionner ici, j'ai réussi après avoir mis mon nom de schéma en majuscule.
mettez ceci dans votre fichier de contexte sous votre nouvelle classe dbContext, comme ceci:
public partial class MyAppContext : DbContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("UPPERCASE_SCHEMA_NAME");
...
- je résoudre ce juste mettre le schéma par défaut à modelBuilder
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("MyOracleSchema");
// ...
}
L'utilisateur Dbo vient aussi en cas de manque de nom pleinement qualifié de la Table. Qui peut ne pas correspondre à la bonne Table dans la base de données.
si vous utilisez les Migrations automatiques (comme je l'étais), alors notez:modelBuilder.HasDefaultSchema
qui ne vous aidera pas tant que vous ne passerez pas à des migrations explicites.
Code First Les Migrations automatiques se limitent à travailler avec le dbo schéma. En raison de cette limitation, il est recommandé d'utiliser des migrations basées sur le code, c'est-à-dire d'ajouter des migrations explicites via la commande Add-Migration
En Code First vous pouvez utiliser les annotations de données pour Table .
[Table ("Emplpoyee", Schema= "YOUR SCHEMA NAME"]