Использование служб WCF Data Services 5.6.0 с Entity Framework 6+

.net entity-framework-6 odata wcf

Вопрос

Я пытаюсь заставить нашу службу данных WCF работать с новой Entity Framework 6.

Я нашел эту статью, которая объясняет, возможно, простой и безболезненный способ решить эту проблему.

Я следовал точно указанным направлениям. Когда я впервые устанавливаю:

Install-Package Microsoft.OData.EntityFrameworkProvider -Version 1.0.0-alpha1 -Pre

Я получаю сообщение об ошибке:

Ошибка 16 Тип «Microsoft.OData.Service.DataService`1» определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку «Microsoft.OData.Service, Version = 5.6.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35». C: \ Realtime Source \ RTR 6.x \ RTRServices \ RTRWCFDataService \ RTRWCFDataService \ RTRWCFData.svc.cs 21 16 RTRWCFDataService

Изучив это, кажется, что решение заключается в обновлении до альфа-2 ... и для этого используйте команду:

Install-Package Microsoft.OData.EntityFrameworkProvider -Pre 

Когда я использую эту команду, консоль диспетчера пакетов выводит две ошибки:

Exception, вызывающий «CreateInstanceFrom» с аргументами «8»: «Не удалось загрузить тип« System.Data.Entity.ConnectionFactoryConfig.InitializeEntityFrameworkCommand »из сборки« E ntityFramework.PowerShell, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' .» В C: \ Realtime Source \ RTR 6.x \ RTRServices \ RTRWCFDataService \ packages \ EntityFramework.6.0.1 \ tools \ EntityFramework.psm1: 698 char: 31 + $ domain.CreateInstanceFrom <<<< (+ CategoryInfo: NotSpecified: ( :) [], MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException Exception вызывает «CreateInstanceFrom» с аргументами «8»: «Не удалось загрузить тип« System.Data.Entity.ConnectionFactoryConfig.AddProviderCommand »из сборки« EntityFramework .PowerShell, Version = 5.0 .0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 '. "В C: \ Realtime Source \ RTR 6.x \ RTRServices \ RTRWCFDataService \ packages \ EntityFramework.6.0.1 \ tools \ EntityFramework.psm1: 698 char: 31 + $ domain .CreateInstanceFrom <<<< (+ CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException

Затем я теряю возможность доступа к пространству имен Microsoft.OData ... в основном, удерживая меня от класса, который мне нужен, чтобы завершить обновление. Microsoft.OData.Service.Providers.EntityFrameworkDataService

Любая помощь по этому вопросу будет принята с благодарностью!

Принятый ответ

Хотя мне удалось установить версию Alpha 2, у меня возникло немало проблем с этим провайдером. Многие из них дают неясные или вводящие в заблуждение исключения, как вы можете найти в комментариях к первоначальному объявлению. И в настоящее время разработчики не активно привлекают сообщество к работе над проблемами. Фактически, учитывая, что прошло почти два месяца со времени последнего выпуска Alpha, неясно, является ли это приоритетом в Microsoft.

Учитывая это, я бы не рекомендовал использовать какой-либо производственный код этого провайдера. На самом деле, я бы не решался даже развиваться против него, надеясь, что более стабильная версия будет выпущена позже, пока мы не увидим больше изменений за этой версией библиотеки. Мое подозрение в том, что с выпуском ASP.NET Web API 2.0 службы данных WCF были добавлены на задний план.

До тех пор вам, вероятно, будет лучше следовать одному из следующих вариантов:

  • Возврат к Entity Framework 5.0.
  • Создание пользовательских веб-API с расширениями OData .
  • Принятие нового RESTier от Microsoft.
  • Использование альтернативного уровня обслуживания, такого как Breeze *.

Вероятно, это не тот ответ, на который вы надеетесь, и он не касается вашего непосредственного препятствия, но пока на официальном провайдере больше не будет движения, я бы рассмотрел эти варианты.

* Breeze - это клиентская библиотека JavaScript для использования служб oData, но также включает в себя серверную библиотеку для взаимодействия с популярными O / RM, включая Entity Framework 6.0, а также NHibernate.


Популярные ответы

О проблеме, которую вы встретили, когда «Install-Package Microsoft.OData.EntityFrameworkProvider -Pre»

Из информации об ошибке кажется, что EntityFramework.psm1 версии 6.0.0 пытается загрузить некоторый код из EntityFramework.PowerShell.dll, Version = 5.0.0.0. Я пробовал свое решение, я не могу воспроизвести эту проблему.

Поэтому я предполагаю, что вы каким-то образом смешали EntityFramework 5.0.0 и EntityFramework 6.0.1, но на самом деле я не знаю, как это сделать. Поэтому мое предложение состоит в следующем:

  1. удалить пакет Microsoft.OData.EntityFrameworkProvider
  2. uninstall-package EntityFramework
  3. uninstall-package EntityFramework -version 5.0.0
  4. Затем переустановите пакет «Microsoft.OData.EntityFrameworkProvider» с помощью «Install-Package Microsoft.OData.EntityFrameworkProvider -Pre»,

Если первые три шага не могут быть выполнены правильно в вашем проекте, просто вручную удалите все папки EntityFramework и папку Microsoft.OData.EntityFrameworkProvider.1.0.0-alpha2 в пакетах. А затем сделайте четвертый шаг

Надеюсь, это сработает для вас



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему