使用实体框架5.0从存储过程返回Int和复杂类型
本文关键字:Int 返回 复杂 类型 存储过程 实体 框架 | 更新日期: 2023-09-27 18:17:50
我有一个项目,在这个项目中我必须使用一个存储过程。它用于在数据库中创建新记录。它返回一个Int32
,它是表中记录的新ID。它还有一个临时表,用于存储错误并在第二个结果中发回。最后两行是
SELECT @NewID
SELECT * From @ErrorsTable
我必须使用实体框架调用存储过程。我的问题是我不知道如何得到两个返回结果。
从数据库更新时的默认值是只返回一个Int32
。我试着遵循一些例子,他们从存储过程中做多个返回结果,但我认为它不适合我,因为所有的例子返回多个复杂类型,我有一个标量和复杂类型的混合。
所以我想我最终解决它的方法是在这个链接http://msdn.microsoft.com/en-us/data/jj691402.aspx
我向我的Repository添加了一个新方法,该方法返回一个被调用的存储过程并返回多个结果集。以下内容
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在我的例子中是没问题的。但这是我所做的基本内容,可以根据需要进行更改。