最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET Core實現(xiàn)分表分庫、讀寫分離的通用 Repository功能

 更新時間:2019年04月03日 15:42:44   作者:dotnetGen  
這篇文章主要介紹了.NETCore 下支持分表分庫、讀寫分離的通用 Repository,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

首先聲明這篇文章不是標(biāo)題黨,我說的這個類庫是 FreeSql.Repository,它作為擴(kuò)展庫現(xiàn)實了通用倉儲層功能,接口規(guī)范參考 abp vnext 定義,實現(xiàn)了基礎(chǔ)的倉儲層(CURD)。

安裝

dotnet add package FreeSql.Repository

可用于:.net framework 4.6+、.net core 2.1+

定義
var fsql = new FreeSql.FreeSqlBuilder()
 .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\document.db;Pooling=true;Max Pool Size=10")
 .UseLogger(loggerFactory.CreateLogger<IFreeSql>())
 .UseAutoSyncStructure(true) //自動遷移實體的結(jié)構(gòu)到數(shù)據(jù)庫
 .Build();

過濾與驗證

假設(shè)我們有User(用戶)、Topic(主題)兩個實體,在某領(lǐng)域類中定義了兩個倉儲:

var userRepository = fsql.GetGuidRepository<User>();
var topicRepository = fsql.GetGuidRepository<Topic>();

開發(fā)過程中,我總會擔(dān)心 topicRepository 的數(shù)據(jù)安全問題,即有可能查詢或操作到其他用戶的主題。因此在v0.0.7版本進(jìn)行了改進(jìn),增加了 filter lambad 表達(dá)式參數(shù)。

var userRepository = fsql.GetGuidRepository<User>(a => a.Id == 1);
var topicRepository = fsql.GetGuidRepository<Topic>(a => a.UserId == 1);
  • 在查詢/修改/刪除時附加此條件,從而達(dá)到不會修改其他用戶的數(shù)據(jù);
  • 在添加時,使用表達(dá)式驗證數(shù)據(jù)的合法性,若不合法則拋出異常;

有朋友說這個功能像 abp 的租戶,但這是更小單位的過濾+驗證,確保數(shù)據(jù)安全。
有朋友說這個功能省事,但我覺得是省心。

分表與分庫

GuidRepository 作為分存式倉儲將實現(xiàn)了分表與分庫(不支持跨服務(wù)器分庫)的封裝類。

var logRepository = fsql.GetGuidRepository<Log>(null, oldname => $"{oldname}_{DateTime.Now.ToString("YYYYMM")}");

上面我們得到一個日志倉儲實例按年月分表,使用它 CURD 最終會操作 Log_201903 表。

注意:雖然 FreeSql 支持 CodeFirst 遷移,但不提供遷移分表,開發(fā)環(huán)境中仍然可以遷移 Log 表。

讀寫分離

FreeSql 支持?jǐn)?shù)據(jù)庫讀寫分離,本功能是客戶端的讀寫分離行為,數(shù)據(jù)庫服務(wù)器該怎么配置仍然那樣配置,不受本功能影響,為了方便描術(shù)后面講到的【讀寫分離】都是指客戶端的功能支持。

各種數(shù)據(jù)庫的讀寫方案不一,數(shù)據(jù)庫端開啟讀寫分離功能后,讀寫分離的實現(xiàn)大致分為以下幾種:

1、nginx代理,配置繁瑣且容易出錯;

2、中件間,如MySql可以使用MyCat,但是其他數(shù)據(jù)庫怎么辦?

3、在client端支持;

FreeSql 實現(xiàn)了第3種方案,支持一個【主庫】多個【從庫】,【從庫】的查詢策略為隨機方式。

若某【從庫】發(fā)生故障,將切換到其他可用【從庫】,若已全部不可用則使用【主庫】查詢。

出現(xiàn)故障【從庫】被隔離起來間隔性的檢查可用狀態(tài),以待恢復(fù)。以 mysql 為例:

var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" + 
 "Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10";

IFreeSql fsql = new FreeSql.FreeSqlBuilder()
 .UseConnectionString(FreeSql.DataType.MySql, connstr)
 .UseSlave("connectionString1", "connectionString2") //使用從數(shù)據(jù)庫,支持多個
 .Build();

select.Where(a => a.Id == 1).ToOne(); //讀【從庫】(默認(rèn))
select.Master().WhereId(a => a.Id == 1).ToOne(); //強制讀【主庫】
其他特性
  • [x] 支持 CodeFirst 遷移;
  • [x] 支持 DbFirst 從數(shù)據(jù)庫導(dǎo)入實體類,支持三種模板生成器;
  • [x] 采用 ExpressionTree 高性能讀取數(shù)據(jù);
  • [x] 支持深入的類型映射,比如pgsql的數(shù)組類型;
  • [x] 支持豐富的表達(dá)式函數(shù);
  • [x] 支持導(dǎo)航屬性查詢,和延時加載;
  • [x] 支持同步/異步數(shù)據(jù)庫操作方法,豐富多彩的鏈?zhǔn)讲樵兎椒ǎ?/li>
  • [x] 支持讀寫分離、分表分庫;
  • [x] 支持多種數(shù)據(jù)庫,MySql/SqlServer/PostgreSQL/Oracle/Sqlite;
結(jié)束語

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Entity?Framework實現(xiàn)數(shù)據(jù)遷移

    Entity?Framework實現(xiàn)數(shù)據(jù)遷移

    本文詳細(xì)講解了Entity?Framework實現(xiàn)數(shù)據(jù)遷移的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 使用CustomValidator自定義驗證控件檢查是否有對ListBox控件選擇

    使用CustomValidator自定義驗證控件檢查是否有對ListBox控件選擇

    在網(wǎng)頁前端處,我們放置ListBox控件,在數(shù)據(jù)提交前,檢查用戶是否有對此控件進(jìn)行選擇?小編將介紹使用Javascript與CustomValidator自定義驗證控件來檢查感興趣的朋友可以了解下
    2013-01-01
  • ASP.NET Core 3.x 并發(fā)限制的實現(xiàn)代碼

    ASP.NET Core 3.x 并發(fā)限制的實現(xiàn)代碼

    這篇文章主要介紹了ASP.NET Core 3.x 并發(fā)限制的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 微信公眾平臺開發(fā)之自定義菜單.Net代碼解析

    微信公眾平臺開發(fā)之自定義菜單.Net代碼解析

    這篇文章主要為大家詳細(xì)解析了微信公眾平臺開發(fā)之自定義菜單.Net代碼,感興趣的小伙伴們可以參考一下
    2016-06-06
  • .net實現(xiàn)oracle數(shù)據(jù)庫中獲取新插入數(shù)據(jù)的id的方法

    .net實現(xiàn)oracle數(shù)據(jù)庫中獲取新插入數(shù)據(jù)的id的方法

    在oracle數(shù)據(jù)庫中實現(xiàn)插入數(shù)據(jù)的自動增長不是很容易,想在.net中實現(xiàn)獲取新插入數(shù)據(jù)的id,感興趣的朋友看下詳細(xì)的解決方法,希望對你有所幫助
    2013-04-04
  • ASP.NET?MVC實現(xiàn)單個圖片上傳、限制圖片格式與大小并在服務(wù)端裁剪圖片

    ASP.NET?MVC實現(xiàn)單個圖片上傳、限制圖片格式與大小并在服務(wù)端裁剪圖片

    這篇文章介紹了ASP.NET?MVC實現(xiàn)單個圖片上傳、限制圖片格式與大小并在服務(wù)端裁剪圖片的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • C#抽象類的用法介紹

    C#抽象類的用法介紹

    這篇文章介紹了C#抽象類的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • VS2019離線安裝方法圖文教程

    VS2019離線安裝方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了VS2019離線安裝方法圖文教程,,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • ASP.NET MVC結(jié)合JavaScript登錄、校驗和加密

    ASP.NET MVC結(jié)合JavaScript登錄、校驗和加密

    這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC結(jié)合JavaScript登錄、校驗和加密的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Asp.Mvc?2.0用戶客戶端驗證實例講解(3)

    Asp.Mvc?2.0用戶客戶端驗證實例講解(3)

    這篇文章主要介紹了Asp.Mvc?2.0實現(xiàn)客戶端驗證功能,本文使用jquery.validate插件進(jìn)行驗證,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-08-08

最新評論

珠海市| 洛宁县| 安阳县| 民丰县| 张家港市| 叙永县| 沅陵县| 新丰县| 长沙市| 五莲县| 寻乌县| 固镇县| 临江市| 大田县| 仪征市| 东丽区| 宜州市| 江西省| 阿城市| 通渭县| 永州市| 辉南县| 吉木乃县| 绥芬河市| 杭锦后旗| 洛扎县| 怀远县| 陇川县| 宁国市| 潞西市| 呼伦贝尔市| 蕉岭县| 库伦旗| 贵定县| 阿克陶县| 蓬溪县| 曲麻莱县| 高邮市| 遂平县| 昆明市| 棋牌|