Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架:无法调用存储过程,代码生成错误_C#_Entity Framework_Stored Procedures - Fatal编程技术网

C# 实体框架:无法调用存储过程,代码生成错误

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

我有一个可工作的存储过程,当从旧的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 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();
}