Dapper官方文档(八)【工具之异步,缓冲,事务,存储过程】

小灰灰 2021-07-04 15:48 942阅读 0赞

异步

描述

Dapper还使用了Async(异步)方法扩展了IDbConnection接口:

  • ExecuteAsync
  • QueryAsync
  • QueryFirstAsync
  • QueryFirstOrDefaultAsync
  • QuerySingleAsync
  • QuerySingleOrDefaultAsync
  • QueryMultipleAsync

我们只在本教程中添加了非异步版本,以便于阅读。

ExecuteAsync

  1. var sql = "Invoice_Insert";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. var affectedRows = connection.ExecuteAsync(sql,
  6. new { Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
  7. commandType: CommandType.StoredProcedure)
  8. .Result;
  9. }

QueryAsync

  1. var sql = "Invoice_Insert";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. var invoices = connection.QueryAsync<Invoice>(sql).Result.ToList();
  6. }

QueryFirstAsync

  1. var sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. var invoice = connection.QueryFirstAsync<Invoice>(sql, new { InvoiceID = 1}).Result;
  6. }

QueryFirstOrDefaultAsync

  1. var sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. var invoice = connection.QueryFirstOrDefaultAsync<Invoice>(sql, new { InvoiceID = 1}).Result;
  6. }

QuerySingleAsync

  1. var sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. var invoice = connection.QuerySingleAsync<Invoice>(sql, new { InvoiceID = 1}).Result;
  6. }

QuerySingleOrDefaultAsync

  1. var sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. var invoice = connection.QuerySingleOrDefaultAsync<Invoice>(sql, new { InvoiceID = 1}).Result;
  6. }

QueryMultipleAsync

  1. var sql = "SELECT * FROM Invoice; SELECT * FROM InvoiceItem;";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. using (var multi = connection.QueryMultipleAsync(sql, new { InvoiceID = 1 }).Result)
  6. {
  7. var invoice = multi.Read<Invoice>().First();
  8. var invoiceItems = multi.Read<InvoiceItem>().ToList();
  9. }
  10. }

缓冲

描述

  • 默认值:True

缓冲查询一次返回整个读取器,这在大多数情况下是理想的。

非缓冲查询与流式传输等效,您只需按需加载对象,这对于一个非常大的查询来减少内存使用情况可能很有用。

  1. string sqlInvoices = "SELECT * FROM Invoice;";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. var invoices = connection.Query<Invoice>(sqlInvoices, buffered: false).ToList();
  5. }

事务

描述

Dapper支持事务和范围事务。

事务

从连接开始一个新事务,并将其传递给事务可选参数。

  1. var sql = "Invoice_Insert";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. using (var transaction = connection.BeginTransaction())
  6. {
  7. var affectedRows = connection.Execute(sql,
  8. new { Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
  9. commandType: CommandType.StoredProcedure,
  10. transaction: transaction);
  11. transaction.Commit();
  12. }
  13. }

范围事务

在开始连接之前开始一个新的范围事务。

  1. // using System.Transactions;
  2. using (var transaction = new TransactionScope())
  3. {
  4. var sql = "Invoice_Insert";
  5. using (var connection = My.ConnectionFactory())
  6. {
  7. connection.Open();
  8. var affectedRows = connection.Execute(sql,
  9. new { Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
  10. commandType: CommandType.StoredProcedure);
  11. }
  12. transaction.Complete();
  13. }

存储过程

描述

在Dapper中使用存储过程非常简单,你只需要指定命令类型。

执行单个

执行一个存储过程。

  1. var sql = "Invoice_Insert";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. var affectedRows = connection.Execute(sql,
  6. new { Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
  7. commandType: CommandType.StoredProcedure);
  8. My.Result.Show(affectedRows);
  9. }

执行多个

执行多个存储过程。

  1. var sql = "Invoice_Insert";
  2. using (var connection = My.ConnectionFactory())
  3. {
  4. connection.Open();
  5. var affectedRows = connection.Execute(sql,
  6. new[]
  7. {
  8. new { Kind = InvoiceKind.WebInvoice, Code = "Many_Insert_1"},
  9. new { Kind = InvoiceKind.WebInvoice, Code = "Many_Insert_2"},
  10. new { Kind = InvoiceKind.StoreInvoice, Code = "Many_Insert_3"}
  11. },
  12. commandType: CommandType.StoredProcedure
  13. );
  14. My.Result.Show(affectedRows);
  15. }

发表评论

表情:
评论列表 (有 0 条评论,942人围观)

还没有评论,来说两句吧...

相关阅读