[高並發]EntityFramework之高性能擴展


目錄

簡介

讀寫分離

讀寫分離,支持可配置項的方式。同時支持權重的方式輪詢。

  • 先看段配置文件
 <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
        • 取消當前區域環境事務
  • 隔離等級IsolationLevel

    • ReadUncommitted(讀未提交)
      • 表示:未提交讀。當事務A更新某條數據的時候,不容許其他事務來更新該數據,但可以進行讀取操作
    • ReadCommitted(讀提交)
      • 表示:提交讀。當事務A更新數據時,不容許其他事務進行任何的操作包括讀取,但事務A讀取時,其他事務可以進行讀取、更新
    • RepeatableRead
      • 表示:重復讀。當事務A更新數據時,不容許其他事務進行任何的操作,但是當事務A進行讀取的時候,其他事務只能讀取,不能更新
    • Serializable
      • 表示:序列化。最嚴格的隔離級別,當然並發性也是最差的,事務必須依次進行。
    • 默認級別
      • Oracle read committed
      • SqlServer read committed
      • MySQL(InnoDB) Read-Repeatable
  • 事務特性(ACID)

    • 原子性(Atomicity)
      • 事務是數據庫的邏輯工作單位,事務中的諸多操作要么全做要么全不做
    • 一致性(Consistency)
      • 事務執行結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態
    • 隔離性(Isolation)
      • 一個數據的執行不能被其他事務干擾
    • 持續性/永久性(Durability)
      • 一個事務一旦提交,它對數據庫中的數據改變是永久性的

說了那么多,本插件對事務的支持:

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等等


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM