Entity Framework 6 Code First 迁移不适用于 Oracle 数据库

问题描述 投票:0回答:1

我正在使用 EF6 和 Oracle 数据库开发 ASP.NET MVC 5 应用程序。

我正在使用代码优先方法,我创建了我的实体和我的 Context 类,然后我尝试了

Enable and Add a Migration
但我收到了此错误。

但是,如果我使用 SQL SERVER 代替 Oracle 数据库,它可以正常工作,但不能用于 Oracle 数据库。

这是错误:

System.Data.Entity.Core.ProviderIncompatibleException: An error occurred accessing the database. 
This usually means that the connection to the database failed. Check that the connection string is correct and that the appropriate

DbContext 构造函数用于指定它或在 应用程序的配置文件。 有关 DbContext 和连接的信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=386386。 有关失败的详细信息,请参阅内部异常。 ---> System.Data.Entity.Core.ProviderInknownException:提供者 未返回 ProviderManifestToken 字符串。 ---> Oracle.ManagedDataAccess.Client.OracleException: ORA-12154: TNS: 无法识别连接的身份 ---> OracleInternal.Network.NetworkException:ORA-12154:TNS:不可能 印地语连接身份证明 在 OracleInternal.Network.AddressResolution..ctor(字符串 TNSAlias,字符串实例名称) 在 OracleInternal.Network.OracleCommunication.DoConnect(字符串 tnsDescriptor) 在 OracleInternal.Network.OracleCommunication.Connect(字符串 tnsDescriptor,布尔 doNAHandshake,字符串 IName) 在 OracleInternal.ServiceObjects.OracleConnectionImpl.Connect(ConnectionString cs,布尔值 bOpenEndUserSession,OracleConnection connRefForCriteria, 字符串实例名) --- 内部异常堆栈跟踪结束 --- 在 OracleInternal.ConnectionPool.PoolManager

3.Get(ConnectionString
  csWithDiffOrNewPwd, Boolean bGetForApp, OracleConnection
  connRefForCriteria, String affinityInstanceName, Boolean bForceMatch)
         at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString
  csWithNewPassword, Boolean bGetForApp, OracleConnection
  connRefForCriteria, String affinityInstanceName, Boolean bForceMatch)
         at OracleInternal.ConnectionPool.OracleConnectionDispenser
3.Get(ConnectionString cs、PM conPM、ConnectionString pmCS、SecureString securePassword、 SecureString secureProxyPassword、OracleConnection connRefForCriteria) 在 Oracle.ManagedDataAccess.Client.OracleConnection.Open() 在 Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices.GetDbProviderManifestToken(DbConnection 联系) 在 System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection 联系) --- 内部异常堆栈跟踪结束 --- 在 System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection 联系) 在 System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices 提供者服务、DbConnection 连接) --- 内部异常堆栈跟踪结束 --- 在 System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices 提供者服务、DbConnection 连接) 在 System.Data.Entity.Infrastruct.DefaultManifestTokenResolver.<>c__DisplayClass1.b__0(Tuple
3
  k)
         at System.Collections.Concurrent.ConcurrentDictionary
2.GetOrAdd(TKey 键,Func
2 valueFactory)
         at System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.ResolveManifestToken(DbConnection
  connection)
         at System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection
  connection, DbProviderManifest& providerManifest)
         at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
         at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext
  internalContext)
         at System.Data.Entity.Internal.RetryLazy
2.GetValue(TInput 输入) 在 System.Data.Entity.Internal.LazyInternalContext.InitializeContext() 在 System.Data.Entity.Internal.LazyInternalContext.get_ModelBeingInitialized() 在 System.Data.Entity.Infrastruct.EdmxWriter.WriteEdmx(DbContext 上下文,XmlWriter 编写器) 在 System.Data.Entity.Utilities.DbContextExtensions.<>c__DisplayClass1.b__0(XmlWriter ) 在 System.Data.Entity.Utilities.DbContextExtensions.GetModel(Action`1 写入Xml) 在 System.Data.Entity.Utilities.DbContextExtensions.GetModel(DbContext 语境) 在 System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration 配置、DbContext usersContext、DatabaseExistenceState 存在状态,布尔值称为ByCreateDatabase) 在 System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration 配置) 在 System.Data.Entity.Migrations.Design.MigrationScaffolder..ctor(DbMigrationsConfiguration 迁移配置) 在 System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.RunCore() 在 System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run() 访问数据库时发生错误。这通常意味着与数据库的连接失败。检查连接是否正确 字符串正确并且适当的 DbContext 构造函数是 用于指定它或在应用程序的配置文件中查找它。 请参阅 http://go.microsoft.com/fwlink/?LinkId=386386 了解有关 DbContext 和连接。有关详细信息,请参阅内部异常 失败*。

这是我的连接字符串:

<connectionStrings>
    <add name="BiatContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=SYSTEM;Password=admin;Data Source=oracle" />
</connectionStrings>
entity-framework oracle11g asp.net-mvc-5 ef-code-first entity-framework-migrations
1个回答
0
投票

您必须像这样更改连接字符串

<connectionStrings>
        <add name="BiatContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=SYSTEM;Password=admin; Min Pool Size=20; Max Pool Size=200; Connection Lifetime=120;Connection Timeout=70;Incr Pool Size=2; Decr Pool Size=3;Data Source=oracle" />
</connectionStrings>
© www.soinside.com 2019 - 2024. All rights reserved.