Web Config&EF6&DbFirst&Oracle - 无法将OracleConnection转换为SqlConnection
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web Config&EF6&DbFirst&Oracle - 无法将OracleConnection转换为SqlConnection相关的知识,希望对你有一定的参考价值。
我正在使用EF 6,采用数据库优先方法和Oracle。但是,在连接时,会抛出以下异常:
无法将“Oracle.ManagedDataAccess.Client.OracleConnection”类型的对象强制转换为“System.Data.SqlClient.SqlConnection”类型
我有点困惑......
我的web.config
看起来实际上是正确的:
<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.122.18.3, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
<connectionStrings>
<add name="TestConnection"
providerName="System.Data.EntityClient"
connectionString="metadata=res://*/Model.Entities.PimEntities.csdl|res://*/Model.Entities.PimEntities.ssdl|res://*/Model.Entities.PimEntities.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string="data source=TestDataSource;persist security info=True;user id=XXX;password=XXX"" />
</connectionStrings>
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.DataAccess.Client" />
<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.122.18.3, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
<entityFramework>
<defaultConnectionFactory type="Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient"
type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="Oracle.ManagedDataAccess.Client"
type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.18.3, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
</entityFramework>
<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<dataSource alias="TestDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=TestServer.TestDomain.loc)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=TestService))) " />
</dataSources>
<settings>
<setting name="BindByName" value="true" />
</settings>
</version>
</oracle.manageddataaccess.client>
</configuration>
为了确保我检查了我的DbContext
课程:
public partial class TestEntities : DbContext
{
public DbSetProvider() : base("name=TestConnection")
{
}
}
似乎是合法的。
经过几个小时的研究,我刚刚创建了一个新的Web应用程序,导入了特定的nuget包,并使用代码优先方法设置了ef,而不生成.edmx
文件。
这按预期工作。
代码第一种方法使用的web.config与之前相同,除了:
<add name="TestConnection"
providerName="Oracle.ManagedDataAccess.Client"
connectionString="User Id=XXX;Password=XXX;Data Source=TestDataSource" />
现在我完成了。
除了providerName
,当然还有元数据信息,没有任何改变。
所以我的问题是:为什么实体框架试图将OracleConnection
转换为SqlConnection
?
或者如何解决我的问题并使用数据库优先方法?
请原谅我不完美的英语技能。
提前致谢。
根据文档here,您的连接字符串providerName应该是Oracle的:
providerName="Oracle.ManagedDataAccess.Client"
不是providerName="System.Data.EntityClient"
以上是关于Web Config&EF6&DbFirst&Oracle - 无法将OracleConnection转换为SqlConnection的主要内容,如果未能解决你的问题,请参考以下文章
DB First,ASP Net Core 2.1,EF6:InvalidOperationException:在应用程序配置文件中找不到名为“DataContext”的连接字符串