亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

DataRabbit 輕量的數據訪問框架(08) -- Dat

系統 2648 0

(完全限定類名: DataRabbit.Application.TransactionScopeFactory , DataRabbit.Application.TransactionScope

關于TransactionScopeFactory首先要提醒以下幾點:
(1)TransactionScopeFactory是DataRabbit框架的入口點,所有的訪問器、 分頁管理器 大綱操作者 都可以從TransactionScopeFactory生成的TransactionScope(事務范圍)處獲取。
(2)TransactionScopeFactory針對的是一個數據庫,對于一個特定的數據庫,應用程序只需要維護一個TransactionScopeFactory實例(引用)即可。

(3)可以按照類似下面的代碼來構造TransactionScopeFactory實例:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> DataConfiguration config = new DataConfiguration (DataBaseType.SqlServer, " 127.0.0.1 " , " sa " , pwd " , " TestDB " , null );
config.MaxPoolSize
= 100 ; // 連接池最大連接數
config.MinPoolSize = 0 ; // 連接池最小連接數
config.CommandTimeoutInSecs = 30 ; // 執行命令的最大超時時間(s)

TransactionScopeFactory transactionScopeFactory = new TransactionScopeFactory ();
transactionScopeFactory.DataConfiguration
= config;
transactionScopeFactory.DBExceptionFilter
= new DBExceptionFilter ( " DBException.txt " );
transactionScopeFactory.Initialize();

DBExceptionFilter 用于捕獲數據庫訪問時拋出的任何異常,上面的示例代碼表示將會把所有的詳細異常信息記錄到當前目錄的 DBException.txt 文件中。關于DBExceptionFilter 更詳細的介紹,可參見 這里


前面講了多種訪問器,并且這些訪問器都繼承了 ITransactionAccesser 接口。我們已經知道,ITransactionAccesser的含義在于:訪問器對象即可以工作于一個事務(Transaction)上下文中,也可以在脫離事務的環境中工作。前面舉的所有示例中都沒有涉及到事務,本文我們將介紹在DataRabbit中如何使用事務。
TransactionScope,表示一個事務的范圍,我們可以從TransactionScope中獲取前述的所有訪問器實例,并且從中獲取的訪問器都是基于事務的(訪問器的生命期將隨事務的結束而結束)。TransactionScope的類圖如下所示:
DataRabbit 輕量的數據訪問框架(08) -- DataRabbit 的入口點:TransactionScopeFactory和TransactionScope
首先,我們看到了一些以“New”打頭的方法,這些方法用于創建各種基于事務的訪問器對象。
TransactionScope會在構造函數中啟動事務,所以我們只有在需要事務的地方才構建TransactionScope實例。TransactionScope實例通常在Business Flow子層中創建。另外,TransactionScope支持兩種使用模式:
(1)自動模式:使用using塊 ,將在異常發生時,自動回滾事務。
(2)手動模式:不使用using塊,可根據業務需要手動回滾事務(調用TransactionScope的Rollback方法),更具靈活性。

我們可以通過DataRabbit.Application.TransactionScopeFactory來獲得TransactionScope對象。

下面我們舉個非常簡單的事務訪問的例子,假設某個業務邏輯要求我們在Update某個student的Age的時候,必須在Book表中插入一條相關記錄,這是一個事務性的動作。使用TransactionScope,我們可以輕易達成目標:

// transactionScopeFactory通常以singleton模式使用
TransactionScopeFactory transactionScopeFactory = ...;


using ( TransactionScope scope = transactionScopeFactory.NewTransactionScope( true ))
{
IOrmAccesser
< Student > stuOrmAccesser = scope. NewOrmAccesser < Student > ();
IOrmAccesser
< Book > bookOrmAccesser = scope. NewOrmAccesser < Book > ();

// 更新Student
Studentstu = new Student();
stu.ID
= 33 ;
stu.Age
= 28 ;
stuOrmAccesser.Update(stu);

// 插入Book
Bookbook = new Book();
book.ID
= 9 ;
book.StudentID
= stu.ID;
bookOrmAccesser.Insert(book);

scope.Commit();//提交事務,別忘了這句
}


上述代碼如果在Update或Insert的時候拋出異常,事務將會自動回滾,這是在TransactionScope的Dispose方法中做到的。

如果不需要事務支持,則transactionScopeFactory.NewTransactionScope( true )方法的參數由 true 改為 false 即可,其它的都不用作任何改變,這使得開啟/關閉事務的控制變得非常的簡單。


轉到: DataRabbit 輕量的數據訪問框架 -- 序

DataRabbit 輕量的數據訪問框架(08) -- DataRabbit 的入口點:TransactionScopeFactory和TransactionScope


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 在线观看国产一区二区三区 | 久久久久久久久久免费视频 | 亚洲成年| 国产剧情一区二区三区 | 免费福利视频网 | 久久精品国产在热久久2019 | 色片在线免费观看 | 欧美一区二区三区视视频 | 午夜影院普通 | 欧美黄色免费在线观看 | 91久久国产精品视频 | 久久一精品 | 精品国精品国产自在久国产不卡 | 奇米奇米色 | 国产香港特级一级毛片 | 成人在线视频免费观看 | 亚洲欧美一区二区三区久久 | 国产 日韩 欧美 亚洲 | 狠狠色狠狠色综合 | 国产亚洲精品一区999 | 一级毛片日韩a欧美 | 你懂得国产 | 色综合欧美综合天天综合 | 色黄啪啪网18以下免费进 | 99精品国产一区二区青青牛奶 | 国产精品一区二区在线观看 | 亚洲我射| 国产亚洲精aa在线观看香蕉 | 国产精品视频色拍拍 | 久青草国产手机视频免费观看 | 四虎影视www| 草久久久久 | 国产成人亚洲综合 | 久久99精品久久久久久h | a久久| 久久久久久综合成人精品 | 亚洲欧美日韩在线精品2021 | 欧美一级午夜免费视频你懂的 | 亚洲热在线 | 国产精品一区视频 | 91精品国产91久久久久久青草 |