我有一个存储过程,我们使用它来简单地将新记录插入到各种表中。此存储过程设置为不返回任何仅用于执行的内容。当我把它拉到我的DBML中时,它会把它设置为一个"虚空",我认为这是正确的。这是DMBL中自动生成的代码。
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.sp_PTS_Action_Insert_Comment")]
public void sp_PTS_Action_Insert_Comment([global::System.Data.Linq.Mapping.ParameterAttribute(Name="Form_Name", DbType="VarChar(20)")] string form_Name, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="Form_Number", DbType="VarChar(25)")] string form_Number, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="UID", DbType="VarChar(15)")] string uID, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="Cmt", DbType="VarChar(200)")] string cmt)
{
this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), form_Name, form_Number, uID, cmt);
}
}
我把这个SP称为:
_context.sp_PTS_Action_Insert_Comment(formInformation["formType"], formInformation["formNumber"], userId, comment);
当这个代码执行时,它抛出一个错误,说
"System Void不是有效的返回类型对于映射的存储过程"
我的问题是,对于那些故意不返回任何内容的SP,你能对存储过程使用linq吗?如果是这样的话,我在这个例子中做错了什么?
我不确定为什么在放入一个不返回任何内容的过程时,Linq会构建上面的void函数,因为它确实抛出了"不是有效的返回类型"错误。
为了解决这个问题,我使用SCOPE_IDENTITY()作为返回添加了一个返回到过程中,这样我也可以在代码中使用它。
希望能有所帮助。