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

  • 相关阅读:
    了解web前端基本常识
    解决移动端输入法挡住输入框的办法
    简单实现根据选项显示不同的表单
    关于“使用本服务器,放到正规的第三方服务器就不安全”的想法
    简单实现网页换肤功能
    Java项目引入eclipse注意事项
    hexo博客发布注意事项
    hexo博客出现“Cannot GET/xxxx”的错误
    C#中ToString()格式详解
    SQLSERVER 时间日期函数,查询今天日期、昨天、一个星期、半年前的数据
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/11521148.html
Copyright © 2011-2022 走看看