导入存储过程后无法编译项目

时间:2014-02-14 10:26:21

标签: entity-framework stored-procedures

将存储过程导入我的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下载VS 2012 Update 1和/或EF 6 Tools。我下载了这些工具,我已经安装了更新4,但是没有帮助

这是为什么?

5 个答案:

答案 0 :(得分:52)

问题是您的模型对新参数一无所知。我想当你的模型使用 EntityFramework(EF)较低版本(例如5.0)时会发生这种情况,但在代码中你试图使用EF 6.0。

因此,您应该将代码降级到EF 5.0,或者将模型升级到6.0。

升级模型:

  1. 打开工具 - &gt; NuGet包管理器 - &gt;包管理器控制台;
  2. 选择项目,其中包含您的模型作为默认项目 控制台顶部。
  3. 键入“Uninstall-Package EntityFramework”,然后按Enter键;
  4. 删除后,键入“Install-Package EntityFramework -version 6.0.0“,然后再次按Enter;
  5. 转到 YourModelName.Context.cs YourModelName.Context.tt 并使用“替换 System.Data.Objects;使用System.Data.Objects.DataClasses;“ with ”使用 System.Data.Entity.Core.Objects;“。此外,您可能需要制作 在出现此问题的所有文件中都相同。
  6. 或者您可以降级代码中使用的EF版本。为此,您应该在前3个步骤中执行所有操作,但在第4个步骤中使用“ - 版本5.0.0”替换“ - 版本6.0.0”。这不需要第5步。

答案 1 :(得分:3)

解决此问题:

如果版本冲突,请为相应版本的EF安装包。

如果版本相同,请将上述名称空间更改为System.Data.Entity.Core.Objects

答案 2 :(得分:2)

您可以在msdn。

下载新版本
  1. 下载Entity Framework 6.1.0或新版本的工具 在http://www.microsoft.com/en-us/download/details.aspx?id=40762
  2. 在程序包管理器控制台中使用 Install-Package EntityFramework -version 6.1.0并输入
  3. 重新启动Visual Studio。 4.检查包裹经理并完成。

答案 3 :(得分:1)

我只是想补充说,在开始一个全新的项目后,这发生在我身上。问题是我创建了一个新项目,然后通过NuGet包管理器继续更新实体框架,ASP.Net MVC和其他包。因此,为我的项目生成的代码不再与我安装的代码相匹配。

对我来说,最快的解决方案就是创建一个新项目,因为我还没有做过任何实际的工作。我希望这有助于其他人。

答案 4 :(得分:1)

我的情况是一个新项目,我去安装了6.0版本的Install-Package EntityFramework,但显然我的项目已经设置了早期版本?不确定如何,也许是MVC 4.0项目的默认设置......

所以我不得不做一个Uninstall-Package -force EntityFramework Install-Package EntityFramework -version 5.0.0

之后一切都有效。