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

  • 相关阅读:
    java基础(一)
    html脚本总结
    python编码规范以及推导式的编写
    性能测试
    IOS 单例分析
    IOS 从一个应用跳转另一个应用
    ios开发 如何在应用内获取当前周围wifi列表和强度 并实现在应用内控制wifi开关
    iOS 获取手机的型号,系统版本,软件名称,软件版本
    ios下最简单的正则,RegexKitLite
    网络编程总结(解析数据,下载文件,确认网络环境)
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/11521148.html
Copyright © 2011-2022 走看看