Невозможно скомпилировать проект после импорта хранимой процедуры
После импорта хранимой процедуры в мой 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
После этого все работало.