日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

.NET輕量級ORM框架Dapper.NET的高級應(yīng)用實(shí)例詳解

來源: 責(zé)編: 時(shí)間:2024-02-06 10:11:45 351觀看
導(dǎo)讀Dapper是一個(gè)輕量級的ORM(對象關(guān)系映射)庫,用于.NET應(yīng)用程序與數(shù)據(jù)庫之間的數(shù)據(jù)訪問。它允許你使用SQL查詢來執(zhí)行數(shù)據(jù)庫操作,而不需要復(fù)雜的映射配置。在這篇文章中,我將為您提供Dapper的高級應(yīng)用功能示例,每個(gè)示例都有源代

2pO28資訊網(wǎng)——每日最新資訊28at.com

Dapper是一個(gè)輕量級的ORM(對象關(guān)系映射)庫,用于.NET應(yīng)用程序與數(shù)據(jù)庫之間的數(shù)據(jù)訪問。它允許你使用SQL查詢來執(zhí)行數(shù)據(jù)庫操作,而不需要復(fù)雜的映射配置。在這篇文章中,我將為您提供Dapper的高級應(yīng)用功能示例,每個(gè)示例都有源代碼和注釋。這些示例將涵蓋Dapper的一些高級功能,以幫助你更好地理解如何在實(shí)際應(yīng)用中使用它。2pO28資訊網(wǎng)——每日最新資訊28at.com

示例1:多表關(guān)聯(lián)查詢

Dapper允許你輕松執(zhí)行多表關(guān)聯(lián)查詢。在這個(gè)示例中,我們將查詢兩個(gè)表,一個(gè)是Customers表,另一個(gè)是Orders表,并將它們關(guān)聯(lián)起來。2pO28資訊網(wǎng)——每日最新資訊28at.com

using Dapper;using System;using System.Data;using System.Data.SqlClient;using System.Linq;public class Customer{    public int CustomerId { get; set; }    public string CustomerName { get; set; }}public class Order{    public int OrderId { get; set; }    public int CustomerId { get; set; }    public decimal TotalAmount { get; set; }}class Program{    static void Main()    {        string connectionString = "YourConnectionStringHere";        using IDbConnection dbConnection = new SqlConnection(connectionString);        string query = "SELECT c.CustomerId, c.CustomerName, o.OrderId, o.TotalAmount " +                       "FROM Customers c " +                       "JOIN Orders o ON c.CustomerId = o.CustomerId";        var result = dbConnection.Query<Customer, Order, Customer>(            query,            (customer, order) =>            {                customer.Orders = order;                return customer;            },            splitOn: "OrderId"        );        foreach (var customer in result)        {            Console.WriteLine($"Customer ID: {customer.CustomerId}, Name: {customer.CustomerName}");            Console.WriteLine($"Order ID: {customer.Orders.OrderId}, Total Amount: {customer.Orders.TotalAmount}");            Console.WriteLine();        }    }}

示例2:事務(wù)處理

Dapper允許你使用事務(wù)來確保一組操作要么全部成功,要么全部失敗。在這個(gè)示例中,我們將演示如何在Dapper中使用事務(wù)。2pO28資訊網(wǎng)——每日最新資訊28at.com

using Dapper;using System;using System.Data;using System.Data.SqlClient;class Program{    static void Main()    {        string connectionString = "YourConnectionStringHere";        using IDbConnection dbConnection = new SqlConnection(connectionString);        dbConnection.Open();        using var transaction = dbConnection.BeginTransaction();        try        {            string insertQuery = "INSERT INTO Products (Name, Price) VALUES (@Name, @Price)";            string updateQuery = "UPDATE Customers SET CustomerName = @CustomerName WHERE CustomerId = @CustomerId";            var product = new { Name = "ProductX", Price = 19.99 };            var customer = new { CustomerName = "NewName", CustomerId = 1 };            dbConnection.Execute(insertQuery, product, transaction: transaction);            dbConnection.Execute(updateQuery, customer, transaction: transaction);            // Commit the transaction if all operations are successful            transaction.Commit();            Console.WriteLine("Transaction committed.");        }        catch (Exception ex)        {            // Rollback the transaction if any operation fails            transaction.Rollback();            Console.WriteLine("Transaction rolled back. Error: " + ex.Message);        }    }}

示例3:自定義類型映射

Dapper允許你自定義數(shù)據(jù)類型到.NET類型的映射。在這個(gè)示例中,我們將使用TypeHandler來自定義Point類型的映射。2pO28資訊網(wǎng)——每日最新資訊28at.com

using Dapper;using System;using System.Data;using System.Data.SqlClient;using Npgsql;using NpgsqlTypes;public class Point{    public double X { get; set; }    public double Y { get; set; }}public class PointTypeHandler : SqlMapper.TypeHandler<Point>{    public override void SetValue(IDbDataParameter parameter, Point value)    {        parameter.Value = $"({value.X},{value.Y})";        parameter.DbType = DbType.String;    }    public override Point Parse(object value)    {        if (value is string strValue)        {            var parts = strValue.Trim('(', ')').Split(',');            if (parts.Length == 2 && double.TryParse(parts[0], out double x) && double.TryParse(parts[1], out double y))            {                return new Point { X = x, Y = y };            }        }        return null;    }}class Program{    static void Main()    {        SqlMapper.AddTypeHandler(new PointTypeHandler());        string connectionString = "YourConnectionStringHere";        using IDbConnection dbConnection = new NpgsqlConnection(connectionString);        string query = "SELECT PointColumn FROM MyTable WHERE Id = @Id";        var result = dbConnection.Query<Point>(query, new { Id = 1 }).FirstOrDefault();        if (result != null)        {            Console.WriteLine($"X: {result.X}, Y: {result.Y}");        }        else        {            Console.WriteLine("Point not found.");        }    }}

示例4:批量插入

Dapper支持批量插入數(shù)據(jù),這對于大規(guī)模數(shù)據(jù)操作非常有用。在這個(gè)示例中,我們將演示如何批量插入多個(gè)產(chǎn)品記錄。2pO28資訊網(wǎng)——每日最新資訊28at.com

using Dapper;using System;using System.Collections.Generic;using System.Data;using System.Data.SqlClient;public class Product{    public string Name { get; set; }    public decimal Price { get; set; }}class Program{    static void Main()    {        string connectionString = "YourConnectionStringHere";        using IDbConnection dbConnection = new SqlConnection(connectionString);        dbConnection.Open();        var products = new List<Product>        {            new Product { Name = "ProductA", Price = 10.99m },            new Product { Name = "ProductB", Price = 15.99m },            new Product { Name = "ProductC", Price = 20.99m }        };        string insertQuery = "INSERT INTO Products (Name, Price) VALUES (@Name, @Price)";        int rowsAffected = dbConnection.Execute(insertQuery, products);        Console.WriteLine($"{rowsAffected} rows inserted.");    }}

示例5:自定義SQL語句

雖然Dapper通常用于執(zhí)行SQL查詢,但你也可以執(zhí)行自定義的SQL語句,例如存儲(chǔ)過程或函數(shù)調(diào)用。在這個(gè)示例中,我們將演示如何執(zhí)行一個(gè)存儲(chǔ)過程。2pO28資訊網(wǎng)——每日最新資訊28at.com

using Dapper;using System;using System.Data;using System.Data.SqlClient;class Program{    static void Main()    {        string connectionString = "YourConnectionStringHere";        using IDbConnection dbConnection = new SqlConnection(connectionString);        string storedProcedure = "MyStoredProcedure";        var parameters = new DynamicParameters();        parameters.Add("Param1", 123);        parameters.Add("Param2", "TestValue", DbType.String, ParameterDirection.Input, 50);        var result = dbConnection.Query<int>(storedProcedure, parameters, commandType: CommandType.StoredProcedure).FirstOrDefault();        Console.WriteLine($"Stored procedure result: {result}");    }}

示例6:自定義SQL語句執(zhí)行

你可以使用Dapper的Execute方法來執(zhí)行自定義的SQL語句,而不僅僅是查詢。在這個(gè)示例中,我們將演示如何執(zhí)行一個(gè)自定義的更新語句。2pO28資訊網(wǎng)——每日最新資訊28at.com

using Dapper;using System;using System.Data;using System.Data.SqlClient;class Program{    static void Main()    {        string connectionString = "YourConnectionStringHere";        using IDbConnection dbConnection = new SqlConnection(connectionString);        string updateStatement = "UPDATE Customers SET CustomerName = @NewName WHERE CustomerId = @CustomerId";        var parameters = new { NewName = "NewName", CustomerId = 1 };        int rowsAffected = dbConnection.Execute(updateStatement, parameters);        Console.WriteLine($"{rowsAffected} rows updated.");    }}

示例7:異步查詢

Dapper支持異步查詢,這對于高并發(fā)應(yīng)用程序非常有用。在這個(gè)示例中,我們將演示如何使用異步方法執(zhí)行查詢。2pO28資訊網(wǎng)——每日最新資訊28at.com

using Dapper;using System;using System.Data;using System.Data.SqlClient;using System.Threading.Tasks;class Program{    static async Task Main()    {        string connectionString = "YourConnectionStringHere";        using IDbConnection dbConnection = new SqlConnection(connectionString);        string query = "SELECT * FROM Products";        var products = await dbConnection.QueryAsync<Product>(query);        foreach (var product in products)        {            Console.WriteLine($"Name: {product.Name}, Price: {product.Price}");        }    }}

示例8:自定義表名

你可以使用Dapper的Table特性來指定實(shí)體類與數(shù)據(jù)庫中不同表之間的映射關(guān)系。在這個(gè)示例中,我們將演示如何自定義表名。2pO28資訊網(wǎng)——每日最新資訊28at.com

using Dapper;using System;using System.Data;using System.Data.SqlClient;[Table("MyCustomTableName")]public class CustomTable{    public int Id { get; set; }    public string Name { get; set; }}class Program{    static void Main()    {        string connectionString = "YourConnectionStringHere";        using IDbConnection dbConnection = new SqlConnection(connectionString);        string query = "SELECT * FROM MyCustomTableName";        var result = dbConnection.Query<CustomTable>(query);        foreach (var item in result)        {            Console.WriteLine($"Id: {item.Id}, Name: {item.Name}");        }    }}

示例9:自定義參數(shù)前綴

Dapper默認(rèn)使用@作為參數(shù)前綴,但你可以自定義參數(shù)前綴。在這個(gè)示例中,我們將演示如何自定義參數(shù)前綴為$。2pO28資訊網(wǎng)——每日最新資訊28at.com

using Dapper;using System;using System.Data;using System.Data.SqlClient;class Program{    static void Main()    {        SqlMapperExtensions.Configure("$$$"); // 設(shè)置參數(shù)前綴為 $$$        string connectionString = "YourConnectionStringHere";        using IDbConnection dbConnection = new SqlConnection(connectionString);        string query = "SELECT * FROM Products WHERE Name = $$$productName";        var result = dbConnection.Query<Product>(query, new { productName = "ProductA" });        foreach (var product in result)        {            Console.WriteLine($"Name: {product.Name}, Price: {product.Price}");        }    }}

示例10:查詢分頁

Dapper使分頁查詢變得容易,你可以使用LIMITOFFSET來執(zhí)行分頁查詢。在這個(gè)示例中,我們將演示如何執(zhí)行分頁查詢。2pO28資訊網(wǎng)——每日最新資訊28at.com

using Dapper;using System;using System.Data;using System.Data.SqlClient;class Program{    static void Main()    {        string connectionString = "YourConnectionStringHere";        using IDbConnection dbConnection = new SqlConnection(connectionString);        int pageSize = 10;        int pageNumber = 2;        string query = "SELECT * FROM Products ORDER BY ProductId OFFSET @Offset ROWS FETCH NEXT @PageSize ROWS ONLY";        var result = dbConnection.Query<Product>(query, new { Offset = (pageNumber - 1) * pageSize, PageSize = pageSize });        foreach (var product in result)        {            Console.WriteLine($"Name: {product.Name}, Price: {product.Price}");        }    }}

這些示例演示了Dapper的一些高級功能,包括多表關(guān)聯(lián)查詢、事務(wù)處理、自定義類型映射、批量插入、自定義SQL語句、異步查詢、自定義表名、自定義參數(shù)前綴和查詢分頁。通過這些示例,你可以更好地了解如何在實(shí)際應(yīng)用中充分利用Dapper來簡化數(shù)據(jù)訪問任務(wù)。2pO28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-74665-0.html.NET輕量級ORM框架Dapper.NET的高級應(yīng)用實(shí)例詳解

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 學(xué)到了!Figma 原來是這樣表示矩形的

下一篇: 文件系統(tǒng)那些事兒,你學(xué)會(huì)了嗎?

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個(gè)線程之間通過某種機(jī)制進(jìn)行協(xié)調(diào)和交互,例如,線程等待和通知機(jī)制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實(shí)現(xiàn)手段有以下幾種方式:Object 類下
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實(shí)現(xiàn)了一個(gè)流處理程序
  • 之家push系統(tǒng)迭代之路

    前言在這個(gè)信息爆炸的互聯(lián)網(wǎng)時(shí)代,能夠及時(shí)準(zhǔn)確獲取信息是當(dāng)今社會(huì)要解決的關(guān)鍵問題之一。隨著之家用戶體量和內(nèi)容規(guī)模的不斷增大,傳統(tǒng)的靠"主動(dòng)拉"獲取信息的方式已不能滿足用
  • 深度探索 Elasticsearch 8.X:function_score 參數(shù)解讀與實(shí)戰(zhàn)案例分析

    在 Elasticsearch 中,function_score 可以讓我們在查詢的同時(shí)對搜索結(jié)果進(jìn)行自定義評分。function_score 提供了一系列的參數(shù)和函數(shù)讓我們可以根據(jù)需求靈活地進(jìn)行設(shè)置。近期
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業(yè) 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁&ldquo;充值中心&rdquo;入口上線了本機(jī)生活界面。壹覽商業(yè)發(fā)現(xiàn),該界面目前主要
  • 得物寵物生意「狂飆」,發(fā)力“它經(jīng)濟(jì)”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內(nèi)的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項(xiàng)。通過上傳自家寵物的部位細(xì)節(jié),就能收獲擁有專業(yè)資質(zhì)認(rèn)證的得物鑒
  • 猿輔導(dǎo)與新東方的兩種“歸途”

    作者|卓心月 出品|零態(tài)LT(ID:LingTai_LT)如何成為一家偉大企業(yè)?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關(guān)鍵的當(dāng)屬對企業(yè)戰(zhàn)略的制定,且能夠站在未來看現(xiàn)在,即使這其中的
  • 三星Galaxy Z Fold/Flip 5國行售價(jià)曝光 :最低7499元/12999元起

    據(jù)官方此前宣布,三星將于7月26日也就是明天在韓國首爾舉辦Unpacked活動(dòng),屆時(shí)將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • OPPO K11樣張首曝:千元機(jī)影像“卷”得真不錯(cuò)!

    一直以來,OPPO K系列機(jī)型都保持著較為均衡的產(chǎn)品體驗(yàn),歷來都是2K價(jià)位的明星機(jī)型,去年推出的OPPO K10和OPPO K10 Pro兩款機(jī)型憑借各自的出色配置,堪稱有
Top 主站蜘蛛池模板: 通许县| 华坪县| 闸北区| 富源县| 凤庆县| 三亚市| 平顶山市| 丰县| 望江县| 和硕县| 天祝| 凤城市| 普定县| 沈阳市| 定南县| 揭西县| 渝北区| 吐鲁番市| 普格县| 班玛县| 甘泉县| 积石山| 陆良县| 陇西县| 永胜县| 长沙市| 保康县| 射阳县| 容城县| 仁怀市| 宁阳县| 新民市| 皋兰县| 平湖市| 涞源县| 和政县| 阿尔山市| 阿图什市| 天峨县| 涪陵区| 寻甸|