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

System.Data.Entity.Infrastructure.Interception.InternalDispatcher
1.Dispatch(TTarget cible, Func3 operation, TInterceptionContext interceptionContext, Action3 exécution, Action3 executed) +72

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
1 statements de migration, dbtransaction transaction, DbInterceptionContext interceptionContext) + 82

Système.Données.Entité.Migration.DbMigrator.Exécutestatsinternes (IEnumerable1 migrationStatements, DbConnection connection) +626

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
1 statements de migration, DbTransaction existingTransaction) + 194

Système.Données.Entité.Migration.DbMigrator.ExecuteStatements(IEnumerable1 migrationStatements) +7

System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable
1 opérations, IEnumerable1 systemOperations, Boolean downgrading, Boolean auto) +825

System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading) +564

System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable
1 pendagemigrations, String targetMigrationId, String lastMigrationId) + 404

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

System.Data.Entity.Internal.InternalContext.CreateDatabase(ObjectContext objectContext, DatabaseExistenceState existenceState) +116

System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) +218

System.Data.Entity.DropCreateDatabaseAlways
1.InitializeDatabase (tcontext context) +137

22
demandé sur Thiago Lunardi 2014-12-02 16:22:17

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");
...
34
répondu Отгонтөгс Миймаа 2016-06-02 06:56:36

- je résoudre ce juste mettre le schéma par défaut à modelBuilder

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.HasDefaultSchema("MyOracleSchema");

    // ...
}
15
répondu Thiago Lunardi 2014-12-02 16:42:50

définir le schéma par défaut n'a pas fonctionné pour moi. J'ai trouvé la solution en personnalisant la table d'histoire des migrations pour définir un schéma différent.

Vous pouvez trouver une solution ici: LINK.

2
répondu VeRo 2015-01-26 11:33:12

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.

enter image description here

2
répondu Aditya 2018-04-03 02:40:48

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.

Oracle Docs:

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
1
répondu Alexey Merson 2016-01-12 17:16:38

En Code First vous pouvez utiliser les annotations de données pour Table .

[Table ("Emplpoyee", Schema= "YOUR SCHEMA NAME"]

1
répondu Faisal Saleem 2016-05-25 03:08:23