国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

解析ABP框架中的事務處理和工作單元

2024-07-10 12:47:08
字體:
來源:轉載
供稿:網友

通用連接和事務管理方法
連接和事務管理是使用數據庫的應用程序最重要的概念之一。當你開啟一個數據庫連接,什么時候開始事務,如何釋放連接...諸如此類的。

正如大家都知道的,.Net使用連接池(connection pooling)。因此,創建一個連接實際上是從連接池中取得一個連接,會這么做是因為創建新連接會有成本。如果沒有任何連接存在于連接池中,一個新的連接對象會被創建并且添加到連接池中。當你釋放連接,它實際上是將這個連接對象送回到連接池。這并不是實際意義上的釋放。這個機制是由.Net所提供的。因此,我們應該在使用完之后釋放掉連接對象。這就是最佳實踐。

在應用程序中,有兩個通用的方來創建/釋放一個數據庫連接:

第一個方法:在Web請求到達的時候,創建一個連接對象。(Application_BeginRequest這個位于global.asax中的事件),使用同一個連接對象來處理所有的數據庫操作,并且在請求結束的時候關閉/釋放這個連接 (Application_EndRequest事件)。

這是個簡易但卻沒效率的方法,原因:

或許這個Web請求不需要操作數據庫,但是連接卻會開啟。這對于連接池來說是個毫無效率的使用方式。 這可能會讓Web請求的運行時間變長,并且數據庫操作還會需要一些執行。這也是一種沒效率的連接池使用方式。 這對于Web應用來說是可行的。如果你的應用程序是Widnows Service,這可能就無法被實現了。 同樣的這是一個使用事務式的數據庫操作最佳場景。如果有一個操作發生失敗,所有的操作都會回滾。因為事務會鎖住數據庫中的一些數據列(事件數據表),它必定要是短暫的。

第二個方法: 創建一個連接當需要的時候(只要在使用它之前)并且釋放它在使用它之后。這是相當高效的,但是就得乏味而且反復的去進行(創建/釋放連接)。

ABP的連接和事務管理
ABP綜合上述兩個連接管理的方法,并且提供一個簡單而且高效的模型。

1.倉儲類(Repository classes)

倉儲是主要的數據庫操作的類。ABP開啟了一個數據庫連接并且在進入到倉儲方法時會啟用一個事務。因此,你可以安全地使用連接于倉儲方法中。在倉儲方法結束后,事務會被提交并且會釋放掉連接。假如倉儲方法拋出任何異常,事務會被回滾并且釋放掉連接。在這個模式中,倉儲方法是單元性的(一個工作單元unit of work)。ABP在處理上述那些動作都是全自動的。在這里,有一個簡單的倉儲:

public class ContentRepository : NhRepositoryBase<Content>, IContentRepository{  public List<Content> GetActiveContents(string searchCondition)  {    var query = from content in Session.Query<Content>()          where content.IsActive && !content.IsDeleted          select content;    if (string.IsNullOrEmpty(searchCondition))    {      query = query.Where(content => content.Text.Contains(searchCondition));    }    return query.ToList();  }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邮箱| 伊通| 晴隆县| 鄯善县| 永新县| 临西县| 恭城| 波密县| 临泉县| 金山区| 抚顺市| 连南| 卓尼县| 伊宁市| 紫阳县| 和静县| 潮安县| 桑植县| 瑞金市| 阿拉尔市| 肇庆市| 安义县| 乐业县| 旅游| 阳泉市| 临泉县| 从化市| 防城港市| 遂溪县| 紫金县| 贞丰县| 陆川县| 额尔古纳市| 新晃| 内乡县| 和平区| 普陀区| 北京市| 八宿县| 金堂县| 江安县|