gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:47:41 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com