【问题标题】:Can't compile project after importing stored procedure导入存储过程后无法编译项目
【发布时间】:2014-02-14 10:26:20
【问题描述】:

将存储过程导入我的数据模型后,项目停止编译。

它一直给我错误:

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 更新 1 和/或 VS 2012 的 EF 6 工具。我下载了这些工具,并且已经安装了更新 4,但这并没有帮助。

这是为什么?

【问题讨论】:

    标签: entity-framework stored-procedures


    【解决方案1】:

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

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

    升级模型:

    1. 打开工具 -> NuGet 包管理器 -> 包管理器控制台;
    2. 选择包含您的模型的项目作为默认项目 控制台顶部。
    3. 输入“Uninstall-Package EntityFramework”并回车;
    4. 删除后,输入 "Install-Package EntityFramework -version 6.0.0",然后再次按 Enter;
    5. 转到 YourModelName.Context.csYourModelName.Context.tt 并替换 "使用 系统.数据.对象; using System.Data.Objects.DataClasses;" with "using System.Data.Entity.Core.Objects;"。另外,您可能需要使 在出现此问题的所有文件中都相同。

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

    【讨论】:

    • 这应该被标记为答案,它对我有用,谢谢。
    • +1 酷...我在 2013 年运行 2012 年的解决方案....简单到可以卸载 6.0.0。并安装构建解决方案的 4.0.0.0...之后工作
    • 这解决了我的问题,谢谢,但每次我从数据库更新我的模型时,“使用...”都会恢复,我必须重新输入它。为什么会发生这种情况,有没有办法阻止它??
    • 它对我有用,但在我的情况下,不需要替换 YourModelName.Context.tt 中的 usings(仅在 YourModelName.Context.cs 中)。它构建好了。谢谢!
    【解决方案2】:

    要解决这个问题:

    如果版本冲突,请为EF的各个版本安装包。

    如果版本相同,把上面的命名空间改成System.Data.Entity.Core.Objects

    【讨论】:

    • 它对我有用,谢谢!我刚刚将命名空间“System.Data.Objects”更改为“System.Data.Entity.Core.Objects”并且它有效!没有任何升级(我安装了 Entity Framework 6.1.0)。
    【解决方案3】:

    您可以在 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. 重新启动您的视觉工作室。 4.检查您的包管理器并完成。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        我的情况是一个新项目,我使用安装了 6.0 版本的 Install-Package EntityFramework 去 nuget,但显然我的项目已经设置了早期版本?不知道如何,可能是 MVC 4.0 项目的默认设置...

        所以我不得不做一个 Uninstall-Package -force EntityFramework 然后 安装包 EntityFramework -version 5.0.0

        之后一切正常。

        【讨论】:

        • 类似情况。唯一的区别是我必须卸载 6.0.0 并安装 4.0.0。您的情况提示我安装较早的版本。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-30
        • 1970-01-01
        • 2012-11-08
        • 2018-11-23
        • 1970-01-01
        相关资源
        最近更新 更多