【问题标题】:Returning an Int and a Complex Type from a stored procedure using Entity Framework 5.0使用 Entity Framework 5.0 从存储过程返回一个 Int 和一个复杂类型
【发布时间】:2014-08-13 22:33:23
【问题描述】:

我有一个项目,我获得了一个必须使用的存储过程。它用于在数据库中创建新记录。它返回一个Int32,它是表中记录的新ID。它还有一个临时表,其中存储错误并在第二个结果中发回。所以基本上最后两行是

SELECT @NewID
SELECT * From @ErrorsTable

我必须使用实体框架来调用存储过程。我的问题我不知道如何获得两个返回结果。

从数据库更新时的默认设置是只返回一个Int32。我尝试遵循一些示例,它们从存储过程中执行多个返回结果,但我认为这对我不起作用,因为所有示例都返回多个复杂类型,而且我混合了标量和复杂类型。

【问题讨论】:

    标签: c# stored-procedures entity-framework-5 multiple-resultsets


    【解决方案1】:

    所以我想我最终通过主要遵循此链接http://msdn.microsoft.com/en-us/data/jj691402.aspx上的代码仅代码选项来解决它

    我向我的存储库添加了一个新方法,该方法返回称为存储过程并返回多个结果集。类似的东西

    Public Object[] StoredProcCall(string storedProc, SqlDbParams sqlParams, type[] types)
    {
        var cmd = dbContext.Database.Connection.CreateCommand();
        cmd.CommandText = storedProc;
        cmd.CommandType = CommandType.StoredProcedure;
        if(parameters != null)
            cmd.Parameters.AddRange(sqlParams);
        var reader = cmd.ExecuteReader();
    
        try
        {
            dbContext.Database.Connection.Open();
            object[] mObj = new object[types.Count];
            for(int i = 0; i < types.Count; i++)
            {
                System.Reflection.MethodInfo method = typeof(AutoMapper.Mapper).GetMethod("DynamicMap", new Type[] { typeof(object)});
                var generic = method.MakeGenericMethod(types[i]);
                objected mappedData = generic.Invoke(this, new object[] { reader});
                mObj[i] = mappedData;
                if(!reader.NextResult())
                    break;
    
            }
            return mObj;
        }
        finally
        {
            dbContext.Database.Connection.Close();
        }
    
    }
    

    唯一的想法是,为了让它工作,我必须创建一个只包含一个属性的类,这是我的简单类型。并且数组中的每种类型都需要是 IEnumerable ,这在我的情况下是可以的。但这是我所做的基本工作,可以根据需要进行更改。

    【讨论】:

      猜你喜欢
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 2016-03-15
      • 2021-09-10
      相关资源
      最近更新 更多