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

目錄

簡介

讀寫分離

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

  • 先看段配置文件
<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)
      • 一個事務一旦提交,它對數據庫中的數據改變是永久性的

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

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

相關文章
相關標籤/搜索