Невозможно скомпилировать проект после импорта хранимой процедуры

После импорта хранимой процедуры в мой datamodel проект прекратил компиляцию.

Он продолжает давать мне ошибку:

The best overloaded method match for 
'System.Data.Entity.Core.Objects.ObjectContext.ExecuteFunction<TicketDataModel.sp_get_orphanjobgrades1_Result>
(string, params System.Data.Entity.Core.Objects.ObjectParameter[])' 
has some invalid arguments  C:\Users\nikolaev\Documents\MySoft\TicketManager-06 11 2013\TicketManager\TicketDataModel\TicketDataModel\TicketEntities.Context.cs 105 20  TicketDataModel

и

`Argument 3: cannot convert from 'System.Data.Objects.ObjectParameter' to 
'System.Data.Entity.Core.Objects.ObjectParameter'   
 C:\Users\nikolaev\Documents\MySoft\TicketManager-06 11 2013\TicketManager\TicketDataModel\TicketDataModel\TicketEntities.Context.cs    79  143 TicketDataModel`

Код в context.cs выглядит следующим образом:

public virtual ObjectResult<sp_get_orphanjobgrades1_Result> sp_get_orphanjobgrades1(Nullable<System.DateTime> start_date, Nullable<System.DateTime> end_date)
{
            var start_dateParameter = start_date.HasValue ?
                new ObjectParameter("start_date", start_date) :
                new ObjectParameter("start_date", typeof(System.DateTime));

            var end_dateParameter = end_date.HasValue ?
                new ObjectParameter("end_date", end_date) :
                new ObjectParameter("end_date", typeof(System.DateTime));

            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<sp_get_orphanjobgrades1_Result>("sp_get_orphanjobgrades1", start_dateParameter, end_dateParameter);
}

Я читал, что это может быть из-за EF 6 и что нужно загрузить VS 2012 Update 1 и/или EF 6 Tools для VS 2012. Я загрузил инструменты, и у меня уже установлено обновление 4, но это не помощь.

Почему это?

Ответы

Ответ 1

Проблема в том, что ваша модель ничего не знает о новых параметрах. Я предполагаю, что это происходит, когда ваша модель использует EntityFramework (EF) более низкую версию (например, 5.0), но в коде, который вы пытаетесь использовать EF 6.0.

Итак, вы должны либо понизить свой код до EF 5.0, либо обновить модель до 6.0.

Модернизирующая модель:

  • Откройте Инструменты → Диспетчер пакетов NuGet → Консоль диспетчера пакетов;
  • Выберите проект, содержащий вашу модель как проект по умолчанию на вверху консоли.
  • Введите "Uninstall-Package EntityFramework" и нажмите Enter,
  • После удаления введите "Install-Package EntityFramework -version 6.0.0 " и снова нажмите Enter;
  • Перейдите в YourModelName.Context.cs и YourModelName.Context.tt и замените "using System.Data.Objects; используя System.Data.Objects.DataClasses; "с помощью" System.Data.Entity.Core.Objects; ". Кроме того, вам может потребоваться выполнить во всех файлах, где появляется эта проблема.

Или вы можете изменить версию EF, используемую в вашем коде. Для этого вы должны сделать все то же самое в первых трех шагах, но на четвертой заменяйте "- версию 6.0.0 на " - версию 5.0.0. Для этого не требуется 5-й шаг.

Ответ 2

Вы можете скачать новые версии в msdn.

  • Инструменты загрузки для Entity Framework 6.1.0 или новые версии в http://www.microsoft.com/en-us/download/details.aspx?id=40762
  • Использование в консоли диспетчера пакетов Install-Package EntityFramework -version 6.1.0 и введите
  • Перезапустите свою визуальную студию. 4.Проверьте свой менеджер пакетов и завершите.

Ответ 3

Чтобы устранить эту проблему:

Если конфликты версий, установите пакет для соответствующей версии EF.

Если версия такая же, измените указанное пространство имен на System.Data.Entity.Core.Objects

Ответ 4

Я просто хочу добавить, что это произошло со мной после запуска совершенно нового проекта. Проблема заключалась в том, что я создал новый проект, а затем приступил к обновлению Entity Framework, ASP.Net MVC и других пакетов через диспетчер пакетов NuGet. Таким образом, код, созданный для моего проекта, больше не соответствовал установленному мной.

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

Ответ 5

Моя ситуация была новым проектом, и я пошел в nuget с Install-Package EntityFramework, который установил версию 6.0, однако, по-видимому, мой проект уже был настроен с более ранней версией? Не знаете, как, возможно, проект MVC 4.0 по умолчанию...

Итак, мне пришлось сделать Uninstall-Package -force EntityFramework, за которым следует Install-Package EntityFramework -version 5.0.0

После этого все работало.