«Не удалось определить версию хранилища; требуется действующее соединение с хранилищем или указание версии» в автономном приложении - PullRequest
0 голосов
/ 01 апреля 2019

Я работаю над большим приложением ASP.NET, которое использует Entity Framework 6. Приложение состоит из большого количества библиотек DLL, некоторые из которых содержат файлы .edml, соответствующие классы сущностей и некоторую дополнительную бизнес-логику для работы. с этими классами сущностей (включая чтение и запись из / в БД).

Это приложение отлично работает; никаких проблем с Entity Framework нет.

Теперь я пытаюсь добавить инструмент командной строки, который вызывает некоторые подпрограммы из вышеупомянутой бизнес-логики. Для этого я ссылаюсь на вышеупомянутые библиотеки DLL в моем проекте приложения командной строки.

Мне удалось получить доступ к базе данных, открыть соединение и выполнить рукописные команды SQL (с помощью CreateCommand) из моего консольного приложения. К сожалению, любые вызовы с использованием Entity Framework до сих пор не выполнялись, что неизменно приводило к высказыванию ArgumentException:

Не удалось определить версию хранилища; требуется действительное подключение к хранилищу или подсказка версии.

Полная трассировка стека (после оставления нашего собственного кода):

  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 constructor is being used to specify it or find it in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=386386 for information on DbContext and connections. See the inner exception for details of the failure.
  ---> System.Data.Entity.Core.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string.
  ---> System.ArgumentException: Could not determine storage version; a valid storage connection or a version hint is required.
   bei System.Data.Entity.SqlServer.SqlProviderServices.GetDbProviderManifestToken(DbConnection connection)
   bei System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
   --- Ende der internen Ausnahmestapelüberwachung ---
   bei System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
   bei System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
   --- Ende der internen Ausnahmestapelüberwachung ---
   bei System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
   bei System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.<>c__DisplayClass1.<ResolveManifestToken>b__0(Tuple`3 k)
   bei System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   bei System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.ResolveManifestToken(DbConnection connection)
   bei System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
   bei System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)

Что здесь не так? Как заставить EF подключаться в моем приложении командной строки так же безупречно, как при запуске из IIS? Как узнать, в чем разница в конфигурации?

Я нашел различные связанные вопросы и ресурсы, ни один из которых не оказался полезным:

...