ServiceStack.OrmLite调用存储过程

 

ServiceStack.OrmLite是我目前用过的最顺手的ORM,Dapper高性能但是在模型映射方面不够灵活;EF封装严密,自动化程度高,但是缺少足够控制。

ServiceStack.OrmLite做到了平衡,简单、好用!

存储过程操作

使用自定义的原始 SQL API 执行存储过程

一个完善的ORM框架除了需要提供方便的对象关系映射操作,还应该提供执行原生SQL的API。

类库API:SqlList

使用自定义的原始SQL API提供非常方便的方式来映射查询结果。
示例:

List<Poco> results = db.SqlList<Poco>("EXEC GetAnalyticsForWeek 1");
List<Poco> results = db.SqlList<Poco>(
"EXEC GetAnalyticsForWeek @weekNo", new { weekNo = 1 });

List<int> results = db.SqlList<int>("EXEC GetTotalsForWeek 1");
List<int> results = db.SqlList<int>(
"EXEC GetTotalsForWeek @weekNo", new { weekNo = 1 });

int result = db.SqlScalar<int>("SELECT 10");

调用存储过程(带Output参数的)

类库API:SqlProc

提供更多自定义的控制,用来控制Ado.Net调用存储过程,返回IDbCommand允许定制参数和索引,示例:

string spSql = @"DROP PROCEDURE IF EXISTS spSearchLetters;
CREATE PROCEDURE spSearchLetters (IN pLetter varchar(10), OUT pTotal int)
BEGIN
    SELECT COUNT(*) FROM LetterFrequency WHERE Letter = pLetter INTO pTotal;
    SELECT * FROM LetterFrequency WHERE Letter = pLetter;
END";

db.ExecuteSql(spSql);

using (var cmd = db.SqlProc("spSearchLetters", new { pLetter = "C" }))
{
var pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output);

var results = cmd.ConvertToList<LetterFrequency>();
var total = pTotal.Value;
}

另一种方式是使用SqlList,它可以让你使用一个过滤器来定制一个存储过程或任何其他命令类型,如:

IDbDataParameter pTotal = null;
var results = db.SqlList<LetterFrequency>("spSearchLetters", cmd => {
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.AddParam("pLetter", "C");
    pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output);
});
var total = pTotal.Value;

更多使用示例,可以参考SqlServerProviderTests

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值