stored-procedures - EF5 需要更新 ContainerName.FunctionImportName 以在更新模型时访问存储过程,任何迷人的解决方案?

标签 stored-procedures entity-framework-5

我是 Entity Framework 的新手,如果我的问题太简单,请见谅。

我目前正在使用 EF5 构建我的项目,我的项目中有一个函数导入“GetStockItem”,它调用存储过程并从 SP 返回数据。每次当我从模型图中“从数据库更新模型”时,更新向导都会毫无问题地反射(reflect)数据库的变化,但 GetStockItem 停止工作。我调用 GetStockItem 时的错误消息是:

“EntityCommand.CommandText 的值对于 StoredProcedure 命令无效。EntityCommand.CommandText 值必须采用‘ContainerName.FunctionImportName’形式。”

解决方案,如错误消息中所述,很明确,我只需要添加 ContainerName。在 context.cs 文件中的 FunctionImportName(在我的例子中是 GetStockItem)之前。

我的问题是如何避免每次从数据库更新模型时发生这种情况?时不时做这个手动的事情很烦人,而且很容易忘记这样做然后引起用户的提示。

希望有人能用迷人的解决方案启发我!干杯!

最佳答案

我刚刚使用 EF5/DbContext 遇到了这个问题。我找到的解决方案是编辑生成 DbContext 的 T4 模板 ([Model].Context.tt)。

在此文件中,找到生成 ExecuteFunction 调用的指令。对我来说,它从第 288 行开始:

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);
}

修改返回行,使 edmFunction.Name 替换为 edmFunction.FullName 保存后,将使用完全限定名称重新生成函数导入代码。

关于stored-procedures - EF5 需要更新 ContainerName.FunctionImportName 以在更新模型时访问存储过程,任何迷人的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17162543/

相关文章:

testing - 如何为我的 Web 应用程序编写测试?

php - 存储过程不工作php mysql

mysql - 存储过程不存在

c# - 如何使用 EF5 和存储库检查给定 ID 的记录是否已存在

c# - EF5 和分离的 POCO,导航属性返回 null

c# - Entity Framework - 如何使用 lambda 通过一个查询选择每个 IDNumber 的第一行

asp.net-mvc - 使用 EF5 代码优先迁移将种子数据放置在何处

mysql - 如何编写存储过程在多个表中插入值

mysql - Mysql中的存储过程: First try

java - 为什么字符串打印不正确?