我已经在Google上搜索了至少3个小时,但是我获得了与ADO.NET相关的所有问题的答案,但是我在Visual Studio 2012和mysql中使用了Entity Framework。
我想调用一个具有1个参数的存储过程,然后执行以下操作:
我从数据库中选择所有存储过程更新了模型。
然后我创建了函数导入
最后我编写了以下代码来调用该存储过程。
我的控制器功能主体
{
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中遇到了此问题,希望微软在将来的EF版本中解决此问题。