UMA*_*MAR 13 stored-procedures entity-framework
我已经在谷歌搜索了至少3个小时,但我得到了与ADO.NET相关的这个问题的所有答案,但我正在使用Visual Studio框架与visual studio 2012和mysql.
我想调用具有1个参数的存储过程以及我做了什么:
最后我写了下面的代码来调用该存储过程.
我的控制器功能体
{db.SetRecipientsToRefferalPayments(new ObjectParameter("referralId",referralId)); }
我自动生成的类(Model.Context.cs)
public virtual int SetRecipientsToRefferalPayments(ObjectParameter referralId)
{
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SetRecipientsToRefferalPayments", referralId);
}
Run Code Online (Sandbox Code Playgroud)
我得到以下错误: EntityCommand.CommandText的值对StoredProcedure命令无效.EntityCommand.CommandText值的格式必须为"ContainerName.FunctionImportName".
任何人指导我如何解决这个问题?
UMA*_*MAR 20
这是一个非常奇怪的问题,花了2-3个小时后我终于找到了解决方案.
解决该问题的步骤:
1)单击[Model] .Context.tt文件2)使用XML Editor或任何文本编辑器打开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);
}
Run Code Online (Sandbox Code Playgroud)
5)将edmFunction.Name更改为edmFunction.FullName,这是此函数的第二行并运行您的代码:)
我在EF5中遇到了这个问题,希望微软在未来的EF版本中解决这个问题.
小智 6
我也得到了这个错误,结果证明是连接字符串.在我的情况下,我有两个独立的实体模型具有相同的实体模型名称.
<connectionStrings>
<add name="EntityModelNameEntities" connectionString="metadata=res://My.Namespace.FirstOne/EntityModelName.csdl|res://My.Namespace.FirstOne/EntityModelName.ssdl|res://My.Namespace.FirstOne/EntityModelName.msl;provider=System.Data.SqlClient;provider connection string="Data Source=...."" providerName="System.Data.EntityClient" />
<add name="OtherModelEntities" connectionString="metadata=res://*/EntityModelName.csdl|res://*/EntityModelName.ssdl|res://*/EntityModelName.msl;provider=System.Data.SqlClient;provider connection string="Data Source=...."" providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
当OtherModelEntities试图找到模型资源时,由于使用了*通配符匹配,它最终匹配My.Namespace.FirstOne中的模型资源.为了纠正这个问题,我更新了OtherModelEntities连接字符串,以包含如下命名空间:
<add name="OtherModelEntities" connectionString="metadata=res://My.Namespace.SecondOne/EntityModelName.csdl|res://My.Namespace.SecondOne/EntityModelName.ssdl|res://My.Namespace.SecondOne/EntityModelName.msl;provider=System.Data.SqlClient;provider connection string="Data Source=...."" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6451 次 |
| 最近记录: |