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

Aun*_*Aun 15 stored-procedures entity-framework

将存储过程导入我的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
Run Code Online (Sandbox Code Playgroud)

`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`
Run Code Online (Sandbox Code Playgroud)

代码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);
}
Run Code Online (Sandbox Code Playgroud)

我读到这可能是因为EF 6并且需要为VS 2012下载VS 2012 Update 1和/或EF 6 Tools.我下载了这些工具,我已经安装了更新4,但这没有帮助.

为什么是这样?

Ale*_*gur 53

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

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

升级模型:

  1. 打开工具 - > NuGet包管理器 - >包管理器控制台;
  2. 选择项目,其中包含您的模型作为控制台顶部的默认项目.
  3. 键入"卸载,包的EntityFramework",然后按Enter键;
  4. 删除后,键入"Install-Package EntityFramework -version 6.0.0"并再次按Enter键;
  5. 转到YourModelName.Context.csYourModelName.Context.tt并替换"using System.Data.Objects; using System.Data.Objects.DataClasses;" 使用"using System.Data.Entity.Core.Objects;" .此外,您可能需要在出现此问题的所有文件中进行相同操作.

或者您可以降级代码中使用的EF版本.为此,您应该在前3个步骤中执行所有操作,但在第4个步骤中将"-version 6.0.0"替换为"-version 5.0.0".这不需要第5步.