关于EF的存储过程操作
作为个人是非常不喜欢使用EF的,因为EF操作起来感觉如刺在喉一样,完全被束缚了;关于ORM我还是比较喜欢Dapper的,基于ADO.NET一切都那么行云流水;
但是公司需要所以...
前提
- 不使用EF自带的存储过程管理工具
- 存储过程带返回值
1.第一种比较简单,不带返回值的;
db.Database.ExecuteSqlCommand(" exec proc proc_ImportReg @id ",new List<SqlParameter>(new SqlParameter("@id",1)).ToArray());
2.第二种带返回值的
--声明存储过程
create proc proc_ImportReg
@Reg varchar output,
@No varchar
as
begin
//此处省略业务
//结尾需要重新查一次返回@Reg 值.不然无法返回值. 这块没有搞明白...
select @Reg
end
--声明对象
public class TEXT
{
public string Reg {get;set;}
}
--声明sql参数
List<SqlParameter> list = new List<SqlParameter>();
SqlParameter Param = new System.Data.SqlClient.SqlParameter
{
ParameterName = "@Reg",
Value = "",
Direction = ParameterDirection.Output
};
list.Add(Param);
list.Add(new SqlParameter("@No", "test"));
--执行存储过程 Single是为了返回参数用
var info = db.Database.SqlQuery<TEXT>(@" exec proc_ImportReg @Reg out ,@No", list.ToArray()).Single();
--获取返回参数 通过传入对应的SqlParameter获取返回值
return list[0].Value // 索引为0的参数,其实就是"@Reg"
网友评论