zoukankan      html  css  js  c++  java
  • Dapper学习(三)之其他用法

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

    1. 首先 dapper支持异步

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

    ExecuteAsync 用法示例:
    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. 

    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

    使用示例如下:

    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

    // 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中使用存储过程,只需要指定命令类型

    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学习

  • 相关阅读:
    windows下安装redis
    十五oracle 触发器
    Flask 学习 六 大型程序结构
    Flask 学习 五 电子邮件
    Flask 学习 四 数据库
    Flask学习 三 web表单
    Flask学习 二 模板
    Flask学习 一 基本结构
    Python操作Redis
    Python操作MySQL
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/11521148.html
Copyright © 2011-2022 走看看