.NET CORE 下如何使用國產資料庫進行 開發

孫凱旋發表於2020-11-01

主流國產資料庫

隨著貿易戰的升級 ,自主研發和智慧財產權也是一個大的趨勢,達夢和人大金倉是國產資料庫中比較主流的

 

1、達夢資料庫

更接近Oracle,更偏向自主研發,對開發人員友好度不如金倉 

達夢公司在總結DM系列產品研發與應用經驗的基礎上,堅持開放創新、簡潔實用的理念,歷經五年匠心打磨,推出的新一代自研資料庫。DM8吸收借鑑當前先...

下載地址:

http://www.dameng.com/down.aspx?TypeId=11&FId=t14:11:14

安裝步驟:

選擇Windows版本直接安裝就行可以了,安裝時需要授權跳過即可

2、人大金倉資料庫

基本上和PgSql一模一樣更貼近開發功能也繼承了pgsql所有功能,對開發人員比較友好

Kingbase ES是面向事務處理類、兼顧分析類應用領域的新型資料庫產品,致力於解決高併發、高可靠資料儲存計算問題,是一款面向企事業單位管理資訊系統、業務及生產系統、

決策支援系統等量身打造的承載資料庫,目前功能效能已全面升級,是真正具有高成熟度的資料庫產品。

下載地址:

https://www.kingbase.com.cn/index/service.html

安裝步驟:

1.選擇 金倉資料庫管理系統

2、選擇 安裝檔案包和授權檔案包 

 

ORM 框架選擇

既然是國產資料庫那麼資料庫ORM也應該選擇國產ORM ,SqlSugar ORM框架是一直更新到現在誕生最早的 國產ORM,出身於2014年距離現在有6年多的時間

原始碼和國產資料庫操作DEMO下載地址

https://github.com/sunkaixuan/SqlSugar 

 

建立專案

建立.NET Core專案

Nuget 只需要安裝SqlSugarCore 就可以操作我們的國產資料庫了

 

建立資料庫物件

連線字串格式

達夢  PORT=5236;DATABASE=DAMENG;HOST=localhost;PASSWORD=SYSDBA;USER ID=SYSDBA

人大金倉 Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1

具體程式碼如下:


var Db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = Config.ConnectionString, DbType = DbType.Dm,//達夢資料庫 IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute, AopEvents = new AopEvents() { OnLogExecuting = (sql, p) => { Console.WriteLine(sql); } } });
 var Db2 = new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString = Config.ConnectionString,
                DbType = DbType.Kdbndp,//人大金倉資料庫
                IsAutoCloseConnection = true,
                InitKeyType = InitKeyType.Attribute,
                AopEvents = new AopEvents()
                {
                    OnLogExecuting = (sql, p) =>
                    {
                        Console.WriteLine(sql);
                    }
                }
            });

 

建立實體

  [SugarTable("STudent")]
   public class Student
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        public int? SchoolId { get; set; }
        public string Name { get; set; }
        public DateTime? CreateTime { get; set; }
        [SugarColumn(IsIgnore=true,NoSerialize =true)]
        public int TestId { get; set; }
    }

    

使用ORM運算元據庫

具體用法和其它資料庫操作一模一樣

//查詢
var getAll = db.Queryable<Student>().ToList();//查詢所有 var getFirst = db.Queryable<Student>().First(it=>it.Id=1);//查詢單條 var getAllNoLock = db.Queryable<Student>().With(SqlWith.NoLock).ToList();//SqlServer裡面的withnolock var getByPrimaryKey = db.Queryable<Student>().InSingle(2);//根據主鍵查詢 var sum = db.Queryable<Student>().Sum(it=>it.Id);//查詢總和 var isAny = db.Queryable<Student>().Where(it=>it.Id==-1).Any();//是否存在 var isAny2 = db.Queryable<Student>().Any(it => it.Id == -1); var getListByRename = db.Queryable<School>().AS("Student").ToList(); var getByWhere = db.Queryable<Student>().Where(it => it.Id == 1 || it.Name == "a").ToList(); var list= db.Queryable<Student>().AS("student2019").ToList();//select * from student2019 var list2 = db.Queryable<Order>().Where(it =>it.Name.Contains("jack")).ToList();//模糊查詢

 

返回List

List<Student> list = db.Queryable<Student>().ToList();

  

返回第一個實體

Student item = db.Queryable<Student>().First(it=>it.Id==1);

 

返回DataTable

DataTable dataTable = db.Queryable<Student>().Select(it => it.Id).ToDataTable();

 

返回Json

var json = db.Queryable<Student>().ToJson();


返回陣列

List<int> listInt=db.Queryable<Student>().Select(it => it.Id).ToList();


返回匿名物件

var dynamic = db.Queryable<Student>().Select<dynamic>().ToList();

 

返回到新類

var viewModel = db.Queryable<Student, School, DataTestInfo>((st, sc, di) => new JoinQueryInfos(
JoinType.Left, st.SchoolId == sc.Id,
JoinType.Left, st.Name == di.String
))
.Select<ViewModelStudent>().ToList();

 

多表返回匿名物件

var newDynamic = db.Queryable<Student, School, DataTestInfo>((st, sc, di) => new JoinQueryInfos(
JoinType.Left, st.SchoolId == sc.Id,
JoinType.Left, st.Name == di.String
)) .Select((st,sc,di)=>new { name=st.Name,scid=sc.Id }).ToList();

 

手動返回到新類

var newClass= db.Queryable<Student, School, DataTestInfo>((st, sc, di) => new JoinQueryInfos(
JoinType.Left, st.SchoolId == sc.Id,
JoinType.Left, st.Name == di.String
)) .Select((st,sc,di)=>new ClassName{ name=st.Name,scid=sc.Id }).ToList();

 

多表查一表

var oneClass = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
JoinType.Left, o.Id == i.OrderId,
JoinType.Left, o.CustomId == c.Id
))
.Select((o, i, c) => c).ToList();

 

多表返回2表

var twoClass = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
JoinType.Left, o.Id == i.OrderId,
JoinType.Left, o.CustomId == c.Id
))
.Select((o, i, c) => new { o,i}).ToList()

 

返回字典集合

List<Dictionary<string, object>> ListDic = db.Queryable<Student, School, DataTestInfo>((st, sc, di) => new JoinQueryInfos(
JoinType.Left, st.SchoolId == sc.Id,
JoinType.Left, st.Name == di.String
)).Select<ExpandoObject>().ToList().Select(it => it.ToDictionary(x => x.Key, x => x.Value)).ToList(); ;

 

 

刪除
db.Deleteable<Student>().In(1).ExecuteCommand();

 

更新
var result= db.Updateable(updateObj).ExecuteCommand();

 

插入
db.Insertable(insertObj).ExecuteCommand(); 

 

除了 增刪查改,SqlSugar ORM 還支援很多功能,就不一一演示,一篇文章介紹不完。 

 

原始碼 DEMO下載地址:

https://github.com/sunkaixuan/SqlSugar

謝謝支援

相關文章