C# 实体框架:无法调用存储过程,代码生成错误
我有一个可工作的存储过程,当从旧的ADO.NET调用时,它可以工作。内容如下:C# 实体框架:无法调用存储过程,代码生成错误,c#,entity-framework,stored-procedures,C#,Entity Framework,Stored Procedures,我有一个可工作的存储过程,当从旧的ADO.NET调用时,它可以工作。内容如下: GO ALTER procedure [dbo].[GetParentID] @SSHIP_AppID as varchar(50), @ParentID as varchar(150) OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ParentID = a.iBuild_GUID FROM dbo.XRef_iBuild_SSHIP as
GO
ALTER procedure [dbo].[GetParentID]
@SSHIP_AppID as varchar(50),
@ParentID as varchar(150) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ParentID = a.iBuild_GUID
FROM dbo.XRef_iBuild_SSHIP as a
WHERE a.SSHIP_appId = @SSHIP_AppID
AND a.SSHIP_appId <> ''
END
以下是我对存储过程执行函数导入时EF生成的内容:
public virtual int GetParentID(string sSHIP_AppID, ObjectParameter parentID)
{
var sSHIP_AppIDParameter = sSHIP_AppID != null ?
new ObjectParameter("SSHIP_AppID", sSHIP_AppID) :
new ObjectParameter("SSHIP_AppID", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("GetParentID", sSHIP_AppIDParameter, parentID);
}
这是正确的吗?如果是这样,我可以用一些示例代码来获取parentID吗?如果没有,我怎样才能让它产生更好的效果呢?在我看来是正确的。因为您可以有多个输出,并且C#函数不能返回多个内容,所以它在ObjectParameter中返回输出。我相信这是它产生它的唯一途径。如果您生成一个函数调用而不是SP调用,那么它可能会生成一个返回类型为string的函数调用(我还没有尝试),但这是为了支持多个输出参数。如果愿意,可以使用自己的函数包装生成的函数,该函数调用该函数并返回parentID参数值
private string GetParentId(string appId)
{
ObjectParameter parentID = new ObjectParameter("ParentID", typeof(string));
GetParentID(appId, parentID);
return parentID.Value.ToString();
}
研究在SqlConnection和SqlCommand ObjectsHanks周围使用“using()”,但如何使用OutputParameter代码?你能给我看一些代码来获取它的parentId吗?Updated-类似这样的东西。在返回parentId.Value时,它是一个对象。我是否只返回parentId.Value.ToString()?是-您可能需要执行空检查。
private string GetParentId(string appId)
{
ObjectParameter parentID = new ObjectParameter("ParentID", typeof(string));
GetParentID(appId, parentID);
return parentID.Value.ToString();
}