Создание шаблона базы данных Oracle с EF Core завершается с ошибкой отказа в входе

Я пытаюсь сформировать некоторые классы из базы данных Oracle для использования с .NET Core Web API. Я установил следующие пакеты nuget:

Oracle.EntityFrameworkCore - v2.18.0-beta3
Oracle.ManagedDataAccess.Core - v2.18.6

Я пробовал строить леса с обоими поставщиками и получаю две разные ошибки.

Команда строительных лесов - Scaffold-DbContext "Data Source=(DESCRIPTION=(ADDRESS_LIST= (ADDRESS=(COMMUNITY=tcpcom.world)(PROTOCOL=tcp)(HOST={Host})(PORT={Port})))(CONNECT_DATA=(SID={SID}))); User ID={UserId};Password={Password}" {Provider} -o Models

  • Oracle.EntityFrameworkCore scaffold error
    ORA-01017: invalid username/password; logon denied
    • I have confirmed my login details to be correct
  • Oracle.ManagedDataAccess scaffold error
    Unable to find expected assembly attribute named DesignTimeProviderServicesAttribute in provider assembly Oracle.ManagedDataAccess. This attribute is required to identify the class which acts as the design-time service provider factory.
    • I have tried implementing the IDesignTimeDbContextFactory<T> interface with no luck

Я пробовал сегодня бесчисленное количество вещей из Google, но безуспешно. Может ли это быть проблема с драйверами Oracle?

ИЗМЕНИТЬ

Я создал консольное приложение .NET Core, установил EF Core и Oracle.EntityFrameworkCore и попытался создать шаблон, но получил ту же ошибку. Также подтвержденная строка подключения верна, если использовать ее для создания DbContext и запроса таблицы, возвращающей записи.


person JB06    schedule 22.05.2019    source источник
comment
Выполняйте тесты только с Oracle.EntityFrameworkCore - другой не является поставщиком EF Core. Я бы предложил сначала создать консольное приложение Net Core, ссылающееся на те же пакеты, и протестировать строку подключения примерно так внутри Main: new DbContext(new DbContextOptionsBuilder<DbContext>().UseOracle(connection_string).Options).Database.OpenConnection();   -  person Ivan Stoev    schedule 23.05.2019
comment
@IvanStoev Я пробовал то, что вы предложили, и похоже, что он подключается и открывает соединение нормально.   -  person JB06    schedule 23.05.2019
comment
Хорошо, следующим шагом может быть попытка выполнить команду Scaffold-DbContext из консольного приложения. В конце концов с опцией -verbose. И посмотрим, как получится.   -  person Ivan Stoev    schedule 23.05.2019
comment
@IvanStoev Та же ошибка, что и раньше, ORA-01017: invalid username/password; logon denied   -  person JB06    schedule 23.05.2019
comment
Хм, я только что попробовал с моим тестовым Oracle db, и он работает. Должен быть связан со строкой подключения. Убедитесь, что строка подключения внутри ... точно такая же, как если бы вы использовали .UseOracle(@"..."), например. никаких двойных обратных косых черт и т. д. Я больше ничего не могу сделать, удачи.   -  person Ivan Stoev    schedule 23.05.2019
comment
Я даже подтвердил, что могу извлекать записи в консольном приложении, используя ту же строку подключения, которую я использую в команде scaffold, поэтому я не думаю, что это проблема строки подключения. Спасибо за вашу помощь.   -  person JB06    schedule 23.05.2019
comment
Странный. Scaffold-DbContext у меня работает. Вот что у меня в консольном приложении: <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.4 " /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.4"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference> <PackageReference Include="Oracle.EntityFrameworkCore" Version="2.18.0-beta3" />. VS2017 15.9.12, если это важно, <TargetFramework>netcoreapp2.0</TargetFramework>.   -  person Ivan Stoev    schedule 23.05.2019
comment
У меня точно такие же пакеты, но я использую VS 2019 16.1.0 и .NET Core 2.2. Создал новый проект в 2017 году, .NET Core 2.0, те же пакеты, та же ошибка. Я здесь в растерянности.   -  person JB06    schedule 23.05.2019
comment
Можете ли вы подключиться к простому консольному приложению, не используя scaffolding или Entity Framework Core? Это может не иметь никакого отношения к EF. Какая у вас версия базы данных? Как вы пытаетесь подключиться? (Вы используете аутентификацию ОС / аутентификацию Windows)? Вы передаете имя пользователя и пароль?   -  person Christian Shay    schedule 25.05.2019
comment
@ChristianShay Я могу подключиться любым способом, кроме команды scaffold. Db версии 12.1.0.2.0. Да, передавая имя пользователя и пароль   -  person JB06    schedule 29.05.2019


Ответы (1)


Проблема оказалась в значке доллара $ в пароле. Консоль VS Package Manager предоставляет интерфейс PowerShell, а $ является зарезервированным символом в PowerShell, поэтому его нужно было экранировать, поместив обратную кавычку ` перед $.

Ответ на форумах сообщества Oracle.

person JB06    schedule 30.05.2019