Я использую 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")
{
}
}
Кажется законным.
После нескольких часов исследований я только что создал новое веб-приложение, импортировал определенные пакеты nuget и настроил ef с подходом, основанным на коде, без генерации файла .edmx
.
Работает как задумано.
Используемый web.config для первого подхода к коду такой же, как и ранее, за исключением:
<add name="TestConnection"
providerName="Oracle.ManagedDataAccess.Client"
connectionString="User Id=XXX;Password=XXX;Data Source=TestDataSource" />
Теперь я полностью закончил.
Ничего не изменилось, кроме providerName
и, конечно, метаданных.
Итак, мой вопрос: почему Entity Framework пытается преобразовать OracleConnection
в SqlConnection
?
Или как исправить мою проблему и использовать подход, основанный на базе данных?
Извините за мои несовершенные навыки английского языка.
Заранее спасибо.