日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

apper

發(fā)布時(shí)間:2024/8/26 综合教程 52 生活家
生活随笔 收集整理的這篇文章主要介紹了 apper 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

查漏補(bǔ)缺系列之dapper初體驗(yàn)

什么是dapper

在維護(hù)一些較老的項(xiàng)目的時(shí)候,往往我們會(huì)用很多sql那么這個(gè)時(shí)候我們要考慮優(yōu)化這些項(xiàng)目的時(shí)候,我們就可以使用dapper

dapper是一款輕量級(jí)的ORM框架,它的優(yōu)勢(shì)很多輕量級(jí),速度快,而且還支持不同的數(shù)據(jù)庫(kù),github地址如下:
https://github.com/StackExchange/Dapper

準(zhǔn)備工作

本次為了演示,我們引用NUnit做單測(cè),通過(guò)SQL Server Profiler來(lái)監(jiān)控生成的sql語(yǔ)句。

dapper引用也特別方面我們可以通過(guò)NuGet下載引用dapper程序包,然后我們?cè)陬惱镆胾sing Dapper;就可以了。

數(shù)據(jù)庫(kù)表結(jié)構(gòu)如下:

另外我們還要?jiǎng)?chuàng)建一個(gè)名為DapperTestModel的實(shí)體

public class DapperTestModel
    {
         public int Id { get; set; }
         public  string Message { get; set; }
    }

讓我們準(zhǔn)備好鏈接字符串開(kāi)始本次演示吧

private string connString =
            System.Configuration.ConfigurationManager.ConnectionStrings["sqlConnectionString"].ConnectionString;

編輯

編輯代碼如下,我們把新增和修改的方法寫在一起,通過(guò)判斷ID是否為0來(lái)覺(jué)得是新增還是修改。首先我們演示新增方法

        [Test]
        public void Edit()
        {
            int ID = 0;
            string sql = "insert into dappertest([Message])values(@Message)";
            using (IDbConnection conn = new SqlConnection(connString))
            {
                if (ID > 0)
                {
                    sql = "update dappertest set [Message]=@Message where Id=@ID";
                    conn.Execute(sql, new {ID = ID, Message = "修改這句話"});
                }
                else
                {
                    conn.Execute(sql, new { Message = "添加一句話" });
                }
            }

        }

這里我們看到dapper很方便的一點(diǎn)就是我們可以使對(duì)象來(lái)代替參數(shù),這里我們就可以通過(guò)匿名對(duì)象來(lái)傳遞參數(shù)

好了我們執(zhí)行單測(cè),看看數(shù)據(jù)庫(kù)中執(zhí)行的語(yǔ)句

exec sp_executesql N'insert into dappertest([Message])values(@Message)',N'@Message nvarchar(4000)',@Message=N'添加一句話'

我們?cè)谌?shù)據(jù)庫(kù)中查看一下數(shù)據(jù)

接著我們?nèi)バ薷腎D來(lái)看看修改方法

exec sp_executesql N'update dappertest set [Message]=@Message where Id=@ID',N'@ID int,@Message nvarchar(4000)',@ID=10,@Message=N'修改這句話'

我們?cè)偃?shù)據(jù)庫(kù)中查看一下數(shù)據(jù)情況

查詢

dapper的查詢功能也很靈活,比如我們需要獲取一個(gè)list列表,如果換成使用DBHelper類,我們可能需要先查詢一個(gè)DateSet然后再將其轉(zhuǎn)成list,那么使用dapper我們可以直接轉(zhuǎn)成list,我們來(lái)看看具體的實(shí)現(xiàn)代碼

        [Test]
        public void GetList()
        {
            using (IDbConnection conn = new SqlConnection(connString))
            {
                string sql = "select ID,[Message] from dappertest";
                List<DapperTestModel> dapperList = conn.Query<DapperTestModel>(sql).ToList();
            }
        }

我們?cè)诳纯磾?shù)據(jù)庫(kù)中的執(zhí)行情況

select ID,[Message] from dappertest

刪除

刪除和新增修改的方式一致,代碼如下

        [Test]
        public void Delete()
        {
            int ID = 10;
      
            using (IDbConnection conn = new SqlConnection(connString))
            {
                int retrunCount = 0;
                string sql = "delete from dappertest where id=@ID";
                    retrunCount = conn.Execute(sql, new { ID = ID });
            }
      
        }

同樣的我們看看數(shù)據(jù)庫(kù)中的執(zhí)行語(yǔ)句

exec sp_executesql N'delete from dappertest where id=@ID',N'@ID int',@ID=10

我們?cè)俨樵兛纯?/p>

存儲(chǔ)過(guò)程

我們?cè)賮?lái)看看存儲(chǔ)過(guò)程的調(diào)用,首先我們?cè)跀?shù)據(jù)庫(kù)中添加一個(gè)簡(jiǎn)單的存儲(chǔ)過(guò)程

CREATE PROCEDURE DapperInsert
@Message nvarchar(200)
AS
insert into dappertest([message])
values(@Message)

然后我們?nèi)フ{(diào)用這個(gè)存儲(chǔ)過(guò)程

        [Test]
        public void PInsert()
        {
            using (IDbConnection conn = new SqlConnection(connString))
            {
                conn.Execute("DapperInsert",new {Message="這是存儲(chǔ)過(guò)程新增的"}, null, null,CommandType.StoredProcedure);
            }
        }

同樣的我們看看數(shù)據(jù)庫(kù)中的執(zhí)行情況

exec DapperInsert @Message=N'這是存儲(chǔ)過(guò)程新增的'

事務(wù)

在平常的業(yè)務(wù)系統(tǒng)中,我們或多或少會(huì)用到事務(wù),那么接下來(lái)我們演示一下在dapper中事務(wù)的調(diào)用

       [Test]
        public void Insert()
        {
            using (IDbConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                //開(kāi)始事務(wù)
                IDbTransaction transaction = conn.BeginTransaction();
                try
                {
                    string sql = "insert into dappertest([Message])values(@Message)";
                    string sql2 = "insert into dappertest([Message])values(@Message)";
                     conn.Execute(sql, new { Message ="再次新增一句話" }, transaction);
                     conn.Execute(sql2, new { Message=""}, transaction);
                    //提交事務(wù)
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    //出現(xiàn)異常,事務(wù)Rollback
                    transaction.Rollback();
                    throw new Exception(ex.Message);
                }
            }
        }

我們故意使其在第二次新增的時(shí)候報(bào)錯(cuò)

我們看看數(shù)據(jù)庫(kù)中的執(zhí)行情況,這里數(shù)據(jù)庫(kù)會(huì)執(zhí)行了兩次
第一次

exec sp_executesql N'insert into dappertest([Message])values(@Message)',N'@Message nvarchar(4000)',@Message=N'再次新增一句話'

第二次

insert into dappertest([Message])values()

這里我們失敗回滾了,我們?cè)诳纯磾?shù)據(jù)庫(kù)中的情框

我們看到數(shù)據(jù)庫(kù)中果然沒(méi)有新增數(shù)據(jù),我們目的也達(dá)到了。

總結(jié)

本次我給大家?guī)?lái)了一些dapper的簡(jiǎn)單應(yīng)用包括簡(jiǎn)單邏輯調(diào)用存儲(chǔ)過(guò)程的調(diào)用,以及事務(wù)的調(diào)用,從我們的簡(jiǎn)單示例中我們看到,dapper是一款十分優(yōu)秀的輕量級(jí)的ORM框架,如果我們需要維護(hù)那種sql語(yǔ)句特別多的項(xiàng)目時(shí),可以考慮使用dapper,使用dapper我們可以通過(guò)對(duì)象很靈活的去給我們的sql語(yǔ)句或者存儲(chǔ)過(guò)程傳遞參數(shù),也可以很靈活的轉(zhuǎn)換類型。

總結(jié)

以上是生活随笔為你收集整理的apper的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。