目錄
簡介
-
本EF擴充套件外掛將持續更新:開源,敏捷,高效能。(由於EF Core暫未提供方便的鉤子位置,暫無EF Core版本)
-
EntityFramework.Extension程式碼 (GitHub歡迎Fork)
-
EntityFramework.Extension程式碼 (Nuget:Install-Package EntityFramework.Extension)
讀寫分離
讀寫分離,支援可配置項的方式。同時支援權重的方式輪詢。
- 先看段配置檔案
<entityFrameworkConfig isSlaveRead="true" readConnstr="Data Source=(localdb)\test;Initial Catalog=Demo;Integrated Security=True;">
<slaves>
<add name="test1" connectionString="Data Source=(localdb)\test;Initial Catalog=Demo;Integrated Security=True;" weight="1"/>
<add name="test2" connectionString="Data Source=(localdb)\test;Initial Catalog=Demo;Integrated Security=True;" weight="10"/>
</slaves>
</entityFrameworkConfig>
isSlaveRead
// 是否開啟讀寫分離readConnstr
// 讀庫連結字串slaves節點
// 當讀庫有多個時,透過weight
支援權重輪詢讀庫功能。(readConnstr配置不為空時,將忽略slaves節點)
指定欄位更新
目前封裝了3種形式的,指定欄位更新方法。
- 物件不存在上下文
var user = new User { Id = 2, Name = Guid.NewGuid().ToString() };
DemoDbContext.CurrentDb.UpdateField(user, "Name");
- 物件已存在上下文
var user = new User { Id = 2, Name = Guid.NewGuid().ToString() };
DemoDbContext.CurrentDb.UpdateField(user, x => x.Id == 2, "Name");
- 物件為IEntity,無論是否存在上下文均支援
var user = new User { Id = 2, Name = Guid.NewGuid().ToString() };
DemoDbContext.CurrentDb.UpdateEntityField(user, "Name");
事務
-
事務型別
在.NET 中,事務分SQLTransaction和TransactionScope。後者在MSDTC(Distributed Transaction Coordinator)開啟的時候,支援分散式事務。- TransactionScopeOption
- Required
- 預設方式,如果存在環境事務,直接取環境事務,如果不存在,則建立新的
- RequiresNew
- 直接建立新的環境事務
- Suppress
- 取消當前區域環境事務
- Required
- TransactionScopeOption
-
隔離等級IsolationLevel
- ReadUncommitted(讀未提交)
- 表示:未提交讀。當事務A更新某條資料的時候,不容許其他事務來更新該資料,但可以進行讀取操作
- ReadCommitted(讀提交)
- 表示:提交讀。當事務A更新資料時,不容許其他事務進行任何的操作包括讀取,但事務A讀取時,其他事務可以進行讀取、更新
- RepeatableRead
- 表示:重複讀。當事務A更新資料時,不容許其他事務進行任何的操作,但是當事務A進行讀取的時候,其他事務只能讀取,不能更新
- Serializable
- 表示:序列化。最嚴格的隔離級別,當然併發性也是最差的,事務必須依次進行。
- 預設級別
- Oracle read committed
- SqlServer read committed
- MySQL(InnoDB) Read-Repeatable
- ReadUncommitted(讀未提交)
-
事務特性(ACID)
- 原子性(Atomicity)
- 事務是資料庫的邏輯工作單位,事務中的諸多操作要麼全做要麼全不做
- 一致性(Consistency)
- 事務執行結果必須是使資料庫從一個一致性狀態變到另一個一致性狀態
- 隔離性(Isolation)
- 一個資料的執行不能被其他事務干擾
- 持續性/永久性(Durability)
- 一個事務一旦提交,它對資料庫中的資料改變是永久性的
- 原子性(Atomicity)
說了那麼多,本外掛對事務的支援:
DemoDbContext.CurrentDb.TransExecute(x => {
x.Users.Add(new User());
return x.SaveChanges();
});
針對事務,同時支援鎖的讀取功能
var userList = DemoDbContext.CurrentDb.NoLockFunc(db => db.Users.ToList());
Entity
類似ABP框架,提供了IEntity,ICreatorEntity,IModifyEntity,IAuditionEntity,IDeletionEntity等等