前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dapper学习(三)之其他用法

Dapper学习(三)之其他用法

作者头像
Vincent-yuan
发布2019-09-29 15:34:36
9260
发布2019-09-29 15:34:36
举报
文章被收录于专栏:Vincent-yuanVincent-yuan

这里说的其他用法,是指 Async,Buffered,Transaction,Stored Procedure。

1. 首先 dapper支持异步

ExecuteAsync, QueryAsync, QueryFirstAsync, QueryFirstOrDefaultAsync, QuerySingleAsync, QuerySingleOrDefaultAsync, QueryMultipleAsync

代码语言:javascript
复制
ExecuteAsync 用法示例:
代码语言:javascript
复制
string sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
    var affectedRows = connection.ExecuteAsync(sql, new {CustomerName = "Mark"}).Result;

    Console.WriteLine(affectedRows);

    var customer = connection.Query<Customer>("Select * FROM CUSTOMERS WHERE CustomerName = 'Mark'").ToList();

    FiddleHelper.WriteTable(customer);
}

2. Buffered

默认是:True

A buffered query return the entire reader at once.

A non-bufferd query is equivalent as streaming. you only load objects on demand. That can be useful for a very large query to reduce memory usage.

代码语言:javascript
复制
string sql = "SELECT * FROM OrderDetails;";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
    var orderDetails = connection.Query<OrderDetail>(sql, buffered: false).ToList();

    FiddleHelper.WriteTable(orderDetails.Take(10));
}

3. Transaction

dapper支持 transaction 和 TransactionScope

Transaction

使用示例如下:

代码语言:javascript
复制
string sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";

using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
    connection.Open();
    
    using (var transaction = connection.BeginTransaction())
    {
        var affectedRows = connection.Execute(sql, new {CustomerName = "Mark"}, transaction: transaction);
        
        transaction.Commit();
        
        Console.WriteLine(affectedRows);
    }
}

TransactionScope

在连接之前,使用 transaction scope

代码语言:javascript
复制
// using System.Transactions;

using (var transaction = new TransactionScope())
{
    var sql = "Invoice_Insert";

    using (var connection = My.ConnectionFactory())
    {
        connection.Open();

        var affectedRows = connection.Execute(sql,
            new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
            commandType: CommandType.StoredProcedure);
    }

    transaction.Complete();
}

4. Stored Procedure

在dapper中使用存储过程,只需要指定命令类型

代码语言:javascript
复制
var sql = "Invoice_Insert";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    var affectedRows = connection.Execute(sql,
        new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
        commandType: CommandType.StoredProcedure);

    My.Result.Show(affectedRows);
}

dapper学习

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档