Ошибка Unable to determine the provider name...
может указывать на то, что .csproj
для основного проекта неправильно установлен согласно инструкциям на Начало работы с ASP.NET Core и Entity Framework 6 .
В моем случае я работал с проектом Core 2.2 и пытался использовать Entity Framework 6 из библиотеки классов .Net Framework 4.7.1, но не смог изменить файл Core .csproj
с <TargetFramework>netcoreapp2.2</TargetFramework>
на <TargetFramework>net471</TargetFramework>
.
Когда я наконец-то изменил целевую платформу, появилась следующая ошибка: Microsoft.AspNetCore.All 2.2.1 is not compatible with net471 (.NETFramework,Version=v4.7.1)
. Я удалил пакет NuGet Microsoft.AspNetCore.All
, который затем создал много пропущенных ошибок при сборке ссылок.
Чтобы устранить ошибки сборки, мне пришлось погуглить отсутствующий тип, чтобы найти имя сборки, добавить этот конкретный пакет NuGet, перестроить, а затем повторять процесс до тех пор, пока все ошибки сборки не будут устранены.
Каждый проект индивидуален, но здесь были пакеты, которые мне пришлось добавить, чтобы исправить проблемы со сборкой после удаления Microsoft.AspNetCore.All
:
<PackageReference Include="EntityFramework" Version="6.2.0" />
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.HttpsPolicy" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="4.5.0" />
После того, как проблемы со сборкой были решены и проект был успешно собран, мой API DotNet Core 2.2 смог вернуть данные с помощью Entity Framework 6 из проекта библиотеки классов.
Подводя итог, можно сказать, что System.NotSupportedException
произошел из-за того, что сгенерированные классы Entity Framework (в библиотеке классов .NET Framework 471) были доступны для версии Entity Framework DotNet Core, а не для версии Entity .NET Framework 4.7.1. Framework.
Перед внесением изменений, перечисленных выше, оценка System.Data.Common.DbProviderFactories.GetFactoryClasses().Rows
в окне немедленной отладки показала пустую коллекцию провайдеров. После внесения изменений в фабричные классы были включены поставщики Odbc, OleDb, Oracle, SqlServer.
Более конкретно, если вы оцениваете строки по отдельности, вы должны увидеть, что провайдеры взяты из Full .NET Framework.
Например: System.Data.Common.DbProviderFactories.GetFactoryClasses().Rows[3].ItemArray
(для меня) показал, что оно пришло от "System.Data.SqlClient.SqlClientFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”
.