日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

.NET 6 跨服務器聯表查詢操作MySql、Oracle、SqlServer等相互聯表

瀏覽:406日期:2022-06-08 16:38:50
目錄
  • 一、大家是否有這個需求
  • 二、 多庫架構ORM
  • 三、跨服務器跨庫聯表查詢
    • 3.1 跨庫查詢之一對一
    • 3.2 跨庫查詢之一對多
    • 3.3 跨庫查詢之多對多  
    • 3.4 多個表查詢我們可以這么寫
    • 3.5 手動指定多庫
    • 3.6是否有性能問題

.NET 6 跨服務器聯表查詢, MySql、Oracle、SqlServer等相互聯表

一、大家是否有這個需求

1.跨品種查詢 :比如 MYSQL和一個SQLSERVER進行聯表查詢 ,或者SQLITE和MYSQL進行聯表查詢

2.跨服務器查詢 : A服務器和B服務器查詢

如果想同時支持1和2 相信很多人都沒有比較好的解決方案

我的設計是通過多庫架構來實現多庫操作

二、 多庫架構ORM

什么是多庫架構ORM,一個對象可以同時操作和管理多個數據庫 我們稱為多庫架構

EF Core

一個對象只能操作一個數據庫,所以EF Core不能稱為多庫架構,只能稱為支持多種數據庫,如果要實現多庫

我們就需外部封裝,代碼如下

SqlSugar

SqlSugar在2017最火的時候停更了一年半,最大的原因就是因為底層架構影響了SqlSugar的上限,歷史遺留問題太多

需要大量重構,如果直接更新對現有用戶是不負責的,所以我選擇了一年半未更新,讓不是特別熱愛SqlSugar的用戶

先用其他框架,留下對于SqlSugar一直熱衷的用戶,能支持和一起完善SqlSugar的用戶,謝謝有一群這樣的用戶不離不棄

籌劃了一年半的時間終于在2020開始進行重構 每隔一個月就重構一部分 加點功能 , 直到今天終于重構完成

代碼如下:

var db = new SqlSugarClient(new List<ConnectionConfig>(){ new ConnectionConfig(){ConfigId="0",DbType=DbType.SqlServer,ConnectionString=..,IsAutoCloseConnection=true}, new ConnectionConfig(){ConfigId="1",DbType=DbType.MySql,ConnectionString=..,IsAutoCloseConnection=true  }});  if(!db.IsAnyConnection(configId))//當前上下文不存在則添加    db.AddConnection(new ConnectionConfig{   DbType = DbType.SqlServer,ConfigId = "1",IsAutoCloseConnection = true,ConnectionString = 。。 });//開啟事務try { //db我們稱為主Db db.BeginTran(); //開啟多庫 (db.Ado.BeginTran是單庫事務)事務支持單庫和多庫   db.GetConnection("1").Insertable(new Order()//var childDb=db.GetConnection(1);我們稱為子DB,子DB不具有租戶方法,具有單當庫操作方法 {   CreateTime = DateTime.Now,   CustomId = 1,   Name = "a",   Price = 1 }).ExecuteCommand();   db.GetConnection("2").Insertable(new Order() {   CreateTime = DateTime.Now,   CustomId = 1,   Name = "a",   Price = 1 }).ExecuteCommand();   //提交事務 db.CommitTran();   }catch(Exception ex){  //回滾事務  db.Rollback();}

多庫架構可以在底層做到兼容,比如事務不需要引用外部DLL,比如我可以讓底層語法支持多庫,像EF CORE你能改他的

Include 語法嗎?改不了,我只能封裝他的語法,或者添加擴展方法。

三、跨服務器跨庫聯表查詢

SqlSugar來實現跨服務器聯表查詢

3.1 跨庫查詢之一對一

[Tenant("db2")]//在類的特性設置當前類屬于哪個庫  public class OrderItem {    [SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]    public int ItemId { get; set; }    public int OrderId { get; set; }    public decimal? Price { get; set; }    [SqlSugar.SugarColumn(IsNullable = true)]    public DateTime? CreateTime { get; set; }    [Navigate(NavigateType.OneToOne,nameof(OrderId))] //設置關系 對應Order表主鍵    public Order Order { get; set; } }//通過ConfigId進行區分是哪個庫var db = new SqlSugarClient(new List<ConnectionConfig>(){  new ConnectionConfig(){ConfigId="db1",DbType=DbType.Sqlite,ConnectionString="DataSource=/Db_OrderDb.sqlite",IsAutoCloseConnection=true},  new ConnectionConfig(){ConfigId="db2",DbType=DbType.Sqlite,ConnectionString="DataSource=/Db_OrderItemDb.sqlite",IsAutoCloseConnection=true }}); //通過實體類特性[Tenant("db2")]自動映射不同數據庫進行查詢var list=db.QueryableWithAttr<OrderItem>().Includes(z => z.Order).ToList(); //1行代碼就搞定了2個庫聯表查詢

3.2 跨庫查詢之一對多

[Tenant("db1")]//指定是db1  (OrderItem類設置為 db2) public class Order {   [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]   public int Id { get; set; }   public string Name { get; set; }   public decimal Price { get; set; }   [SugarColumn(IsNullable = true)]   public DateTime CreateTime { get; set; }   [SugarColumn(IsNullable = true)]   public int CustomId { get; set; }   [Navigate(NavigateType.OneToMany, nameof(OrderItem.OrderId))]//   public List<OrderItem> Items { get; set; } }<br> var list = db.QueryableWithAttr<Order>()   .Includes(z => z.Items)//跨庫一對多   .ToList();

3.3 跨庫查詢之多對多  

我們將3個表扔進3個不同的庫里面

var db = new SqlSugarClient(new List<ConnectionConfig>()   {       new ConnectionConfig(){ConfigId="A",DbType=DbType.Sqlite,ConnectionString="DataSource=/A_DB.sqlite",IsAutoCloseConnection=true},       new ConnectionConfig(){ConfigId="B",DbType=DbType.Sqlite,ConnectionString="DataSource=/B_DB.sqlite",IsAutoCloseConnection=true  },       new ConnectionConfig(){ConfigId="AB",DbType=DbType.Sqlite,ConnectionString="DataSource=/AB_DB.sqlite",IsAutoCloseConnection=true  } });

 實體

 [Tenant("A")]//指定為A庫public partial class OperatorInfo{    /// <summary>    /// 主鍵    /// </summary>    [SugarColumn(IsPrimaryKey = true)]    public int id { get; set; }     /// <summary>    /// 姓名    /// </summary>    public string realname { get; set; }     /// <summary>    /// 多角色    /// </summary>    [Navigate(typeof(OptRole), nameof(OptRole.operId), nameof(OptRole.roleId))]//配置導航    public List<Role> Roles { get; set; }}  [Tenant("B")]//指定為B庫public partial class Role{    /// <summary>    /// 角色    /// </summary>    [SugarColumn(IsPrimaryKey = true )]    public int id { get; set; }     /// <summary>    /// 角色名稱    /// </summary>    public string name { get; set; }  }[Tenant("AB")]//指定為AB庫public partial class OptRole{    /// <summary>    ///    /// </summary>    [SugarColumn(IsPrimaryKey = true)]    public int id { get; set; }     /// <summary>    ///    /// </summary>    public int operId { get; set; }     /// <summary>    ///    /// </summary>    public int roleId { get; set; }  } //3個庫3個表進行多對多查詢var x=db.QueryableWithAttr<OperatorInfo>().Includes(z => z.Roles).ToList();

3.4 多個表查詢我們可以這么寫

//多個表聯表var x=db.QueryableWithAttr<TB>().Includes(z => z.A1).Includes(z => z.A2).Includes(z => z.A3).ToList(); //多個表嵌套聯表var x=db.QueryableWithAttr<TB>().Includes(z =>z.A1, z.Province,z=>z.City)//4個層級.Includes(z => z.A2).Includes(z => z.A3).ToList();

3.5 手動指定多庫

上面都是通多特性實現的多庫查詢,我們也可以手動指定數據庫進行多庫查詢

var list =db.GetConnection("db1").Queryable<OrderItem>()//Orderitem是db1       .CrossQuery(typeof(Order), "db2")//Order是db2       .Includes(z => z.Order)       .ToList();

3.6是否有性能問題

不會SqlSugar跨庫導航和不跨庫導航是一套算法,性能有保障,也就是單庫和多庫性能是一樣的

原理:一次獲取需要的數據,在內存分配置,數據多可進行拆分讀取

如今的成績

企業認可以:

  51job 搜索 簡歷數 僅次 EF 和 Dapper 超過國外的  Nhibernate PetaPoco , 占Dapper 40%簡歷數

知名收費框架 JNPF 和 力軟 都有使用 SqlSugar

培訓機構開始 講解SqlSugar

用戶認可

擁有強大的生態,3k以上的項目就有4個,基本都在500星以上,不算生態就擁有5個2000人群

 RuYiAdmin 、ZrAdminNetCore 、Admin.NET通用管理平臺(gitee 3k) Yi框架(Ruoyi Vue) CoreShop商城(gitee 3k) Blog.Core(github 4k)

YuebonCore Furion(gitee8k) WebFirst 騰訊 APIJSON.NET WaterCloud微服務

ViperFamilyBucket SmartSqlvboot-net WMS倉庫管理系統magic.net

源碼地址:

SqlSugar一直在努力創新,喜歡的Github關注一下,文章推薦或轉發

到此這篇關于.NET 6 跨服務器聯表查詢操作MySql、Oracle、SqlServer等相互聯表的文章就介紹到這了,更多相關.NET 6 跨服務器聯表查詢內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: ASP.NET
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线精品亚洲| 免费日韩一区二区| 精品国内亚洲2022精品成人| 午夜久久tv| 国产精品久久久久av电视剧| 欧美国产专区| 精品一区二区三区的国产在线观看| 在线日韩电影| 欧美日韩国产一区二区在线观看| 青青在线精品| 国产一精品一av一免费爽爽| 日韩欧美四区| 欧美日韩xxxx| 日韩视频1区| 婷婷亚洲成人| 亚洲婷婷丁香| 久久久久久久久久久妇女| 日韩久久电影| 三级在线看中文字幕完整版| 91精品成人| 久久最新视频| 久久午夜影院| 国产精品字幕| 国产精品一区亚洲| 色婷婷综合网| 精品视频一二| 国产va免费精品观看精品视频| 国产 日韩 欧美 综合 一区| 日本一区二区免费高清| 久久久夜精品| 综合激情网...| 香蕉国产精品| 亚洲一二av| 91精品一区二区三区综合在线爱| 麻豆成人综合网| 亚洲精品乱码日韩| 99热精品在线观看| 国产精品久久久久久久免费观看 | 欧美日韩一二三四| 国产乱码午夜在线视频| 国产日本亚洲| 日韩在线观看中文字幕| 国产资源在线观看入口av| 日韩精品视频网| 三级一区在线视频先锋| 视频在线观看一区| xxxxx性欧美特大| 久久久国产精品网站| 日本а中文在线天堂| 日本aⅴ精品一区二区三区| 久久亚洲影院| 成人高清一区| 久久精品国产亚洲夜色av网站| 日韩专区在线视频| 亚洲高清二区| 欧美国产先锋| 国产极品模特精品一二| 今天的高清视频免费播放成人| 美女国产精品| 精品久久视频| 亚洲成人三区| 免费在线看一区| 国产精品天堂蜜av在线播放| 伊人久久高清| 亚洲精品激情| 国产成年精品| 亚洲免费黄色| 青青伊人久久| 99久久婷婷这里只有精品| 亚洲精品在线a| 性欧美长视频| 国内自拍视频一区二区三区| 亚洲va中文在线播放免费| 日韩在线卡一卡二| 国产精品二区不卡| 在线看片日韩| 韩日一区二区| 国产精品白丝一区二区三区| 精品亚洲美女网站| 麻豆成人91精品二区三区| 鲁大师影院一区二区三区| 超碰在线99| 91精品国产自产精品男人的天堂| 亚洲午夜精品久久久久久app| 日韩网站中文字幕| 欧美丰满日韩| 成人午夜亚洲| av成人国产| 国产一区2区| 国产精品蜜芽在线观看| 精品黄色一级片| 中文字幕在线免费观看视频| 亚洲高清二区| 日韩一区亚洲二区| 国产精品**亚洲精品| 国产女人18毛片水真多18精品| 国产精品久久久久久久久久久久久久久 | 新版的欧美在线视频| 91精品精品| 蜜臀久久99精品久久一区二区| 久久久久久网| 日韩视频一区二区三区在线播放免费观看 | 欧美aa国产视频| 国产精品传媒麻豆hd| 丝袜脚交一区二区| se01亚洲视频| 欧美日韩国产免费观看| 视频一区国产视频| 亚洲女同av| 日韩欧美中文在线观看| 日韩黄色在线观看| 国产精品1区| 国产精品亚洲四区在线观看| 不卡av一区二区| 91成人在线精品视频| 国产精品对白久久久久粗| 成人黄色av| 日本欧美在线| 日韩不卡一二三区| 亚洲免费播放| 亚洲电影在线| 风间由美中文字幕在线看视频国产欧美| 少妇久久久久| 国产精品一在线观看| 视频一区在线视频| 国产一区三区在线播放| 久久裸体视频| 国产精品网在线观看| 日本欧美在线看| 国产婷婷精品| 麻豆网站免费在线观看| 国产aⅴ精品一区二区三区久久| 97精品97| 久久国产直播| 婷婷亚洲五月色综合| 成人国产精品| 欧美亚洲激情| 在线日韩中文| 久久都是精品| 国产剧情一区二区在线观看| 日韩不卡一区二区| 久久午夜精品| 久久精品72免费观看| 国产精品美女久久久| 精品一区三区| 亚洲另类av| 精品一区二区男人吃奶| 国产三级精品三级在线观看国产| 亚洲伊人影院| 91超碰国产精品| 国产一在线精品一区在线观看| 天堂中文在线播放| 国产精品一线天粉嫩av| 日本va欧美va精品| 日韩影院精彩在线| 欧美美女一区| 91一区二区三区四区| 中文字幕日韩高清在线| 欧美亚洲激情| 高清日韩中文字幕| 久久一级电影| 日韩高清一区二区| 国产亚洲一区二区手机在线观看| 亚洲91视频| 国产在视频一区二区三区吞精| 亚洲1区在线| 欧美日韩国产一区二区在线观看| 日韩在线卡一卡二| 日韩极品在线观看| 成人污污视频| 国产免费av国片精品草莓男男 | 国产精品色婷婷在线观看| 日本蜜桃在线观看视频| 麻豆精品久久久| 老司机精品视频在线播放| 国产欧美亚洲一区| 久久香蕉精品| 日韩精品三区四区| 红桃视频欧美| 日韩精品高清不卡| 久久三级毛片| 欧美激情视频一区二区三区免费| 亚洲色图综合| 久久婷婷激情| 精品一区二区三区中文字幕| 欧美精品中文字幕亚洲专区| 激情六月综合| 欧美日韩亚洲一区| 国产精品magnet| 99精品一区| 欧美在线看片| 视频二区不卡| 日韩 欧美一区二区三区| 美女久久久精品| 9国产精品视频| 免费在线亚洲欧美| 美女少妇全过程你懂的久久| 久久不见久久见免费视频7| 欧美成人国产| 日韩精品亚洲专区在线观看|