entity-framework - EntityCommand.CommandText 值的格式必须为 'ContainerName.FunctionImportName'

标签 entity-framework stored-procedures

我已经在 Google 上搜索了至少 3 小时,但我得到了与 ADO.NET 相关的这个问题的所有答案,但我正在使用带有 Visual Studio 2012 和 mysql 的 Entity Framework 。

我想调用一个有 1 个参数的存储过程,我做了什么:

  • 我从选择所有存储过程的数据库中更新了模型。
  • 然后我创建了函数导入
  • 最后我编写了以下代码来调用该存储过程。

    我的 Controller 功能体

    {
    db.SetRecipientsToRefferalPayments(new ObjectParameter("referralId",referralId));
    }

  • 我的自动生成类 (Model.Context.cs)
    public virtual int SetRecipientsToRefferalPayments(ObjectParameter referralId)
            {
                return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SetRecipientsToRefferalPayments", referralId);
            }
    

    我收到以下错误:
    EntityCommand.CommandText 的值对于 StoredProcedure 命令无效。 EntityCommand.CommandText 值的格式必须为“ContainerName.FunctionImportName”。

    有人指导我如何解决这个问题?

    最佳答案

    花了 2-3 个小时后,这是一个非常奇怪的问题,我终于找到了解决方案。

    解决该问题的步骤:

    1)点击【模型】.Context.tt文件
    2) 使用 XML 编辑器或任何文本编辑器打开
    3) CTRL + G 定位行号 288 或 277 就我而言
    4) 或者找到以下函数“ ExecuteFunction

    public string ExecuteFunction(EdmFunction edmFunction, string modelNamespace, bool includeMergeOption)
    {
        var parameters = _typeMapper.GetParameters(edmFunction);
        var returnType = _typeMapper.GetReturnType(edmFunction);
    
        var callParams = _code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()));
        if (includeMergeOption)
        {
            callParams = ", mergeOption" + callParams;
        }
    
        return string.Format(
            CultureInfo.InvariantCulture,
            "return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction{0}(\"{1}\"{2});",
            returnType == null ? "" : "<" + _typeMapper.GetTypeName(returnType, modelNamespace) + ">",
            edmFunction.Name,
            callParams);
    }
    

    5)改 edmFunction.Name edmFunction.FullName 这是此函数的倒数第二行并运行您的代码:)

    我在 EF5 中遇到了这个问题,希望微软在 future 的 EF 版本中解决这个问题。

    关于entity-framework - EntityCommand.CommandText 值的格式必须为 'ContainerName.FunctionImportName',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21241104/

    相关文章:

    MYSQL程序将数据从一个表传输到另一个表

    c# - 带有 Power Tools 3.x Beta 的 EF5.x

    sql - 数据库设计 : should nested objects have their own table?

    c# - Entity Framework 6 更新图

    c# - 从 webjob 配置 dbContext

    sql - 使用第一个存储过程中的变量在另一个存储过程中调用一个存储过程

    c# - 使用 LINQ 和 Entity Framework 检查 c# var 中的空值

    mysql - 创建过程 MySQL 错误

    c# - 如何在 MVC View 中显示存储过程结果

    mysql - 如何在Google App Script中调用带有参数的MySQL存储过程?