.NET中全新的MongoDb?ORM框架SqlSugar詳解(最新)
.NET中好用的MongoDb ORM很少,選擇也很少,所以我打造了一款適合SQL習(xí)慣的MongoDb ORM,讓用戶多一個選擇。
1、 MongoDB ORM教程
1.1 NUGET 安裝
SqlSugar.MongoDbCore SqlSugarCore
1.2 已支持功能
單表CRUD+分頁+排序+簡單分組+嵌套文件(類似Json類型)+簡單聯(lián)表
1.3 創(chuàng)建DB對象
//注冊DLL防止找不到DLL(扔在程序啟動時)
InstanceFactory.CustomAssemblies = new System.Reflection.Assembly[] {
typeof(SqlSugar.MongoDb.MongoDbProvider).Assembly };
//db對象(用法和sqlsugar入門中一樣)
var db = new SqlSugarClient(new ConnectionConfig()
{
IsAutoCloseConnection = true,
DbType = DbType.MongoDb,
ConnectionString = SqlSugarConnectionString
},
it =>
{
it.Aop.OnLogExecuting = (sql, para) =>
{ //AOP打印SQL
Console.WriteLine(UtilMethods.GetNativeSql(sql, para));
};
});
//字符串2種都可以
var ConnectionString = "mongodb://root:123456@222.71.212.3:27017/testDB?authSource=admin";
var ConnectionString = "host=222.71.212.3;Port=27017;Database=testDB;Username= root;Password=123456;authSource=admin;replicaSet=";1.4 實體類定義(重點注意)
主鍵定義:繼承MongoDbBase里面自定義好了主鍵
外鍵定義 :設(shè)置 ColumnDataType =nameof(ObjectId)
//繼承的MongoDbBase里面已經(jīng)有了主鍵,當(dāng)然你也可以復(fù)制出來不用基類
public class Student:MongoDbBase
{
//主鍵在基類,也可以自個復(fù)制出來不用基類
public string Name { get; set; }
//外鍵需要設(shè)置ObjectId類型不然存儲會的是string
[SqlSugar.SugarColumn(ColumnDataType =nameof(ObjectId))]
public string SchoolId { get; set; }
}
//MongoDbBase是ORM自帶的一個類,方便你不定義主鍵
public class MongoDbBase
{
[SugarColumn(IsPrimaryKey = true, IsOnlyIgnoreInsert = true, ColumnName = "_id")]
public string Id { get; set; }
}2、CRUD用例
2.1 插入
//插入無返回值 db.Insertable(data).ExecuteCommand(); //插入并將主鍵賦值到實體 db.Insertable(data).ExecuteCommandIdentityIntoEntity(); //插入返回IDS var ids= db.Insertable(data).ExecuteReturnPkList<string>();
2.2 查詢
MongoDb一般是單表操作比較多,官方并不推薦聯(lián)表操作一般用json做嵌套文檔比較多
不過SqlSugar也支持了聯(lián)表
//簡單查詢
var data2 = db.Queryable<Student>().Where(it => it.Book.Price == 1).ToList();
//分頁
var count = 0;
var list = db.Queryable<School>().OrderBy(it=>it.Name).ToPageList(1,2,ref count);
//json類型(實體定義isjson)
var data2 = db.Queryable<Student>().Where(it => it.Book.Price == 1).ToList();
//簡單聯(lián)表(目前只能支持這種基本聯(lián)表)
var list = db.Queryable<Student>()
.LeftJoin<School>((x, y) => x.SchoolId == y.Id)
.LeftJoin<School>((x, y, z) => x.SchoolId == z.Id)
.Where((x, y) =>y.Name == "TestSchool")
.Select((x, y,z) => new
{
StudentName = x.Name,
SchoolName = y.Name,
SchoolName2=z.Name
}).ToList();
//簡單分組查詢
var list14 = db.Queryable<OrderInfo>()
.GroupBy(it => new { it.Name ,it.Price })
.Select(it => new
{
key = it.Name,
Prie=it.Price,
groupCount = SqlFunc.AggregateCount(it.Id),
max = SqlFunc.AggregateMax(it.Id),
min = SqlFunc.AggregateMin(it.Id)
}).ToList();
//目前不支持導(dǎo)航查詢和子查詢2.3 刪除
//根據(jù)主鍵岀隊string [] ids= [...] db.Deleteable<Student>().In(ids).ExecuteCommandAsync() //根據(jù)實體刪除,實體要有主鍵 var delrow = db.Deleteable(data).ExecuteCommand();
2.4 更新
var updateRow2 = db.Updateable(new List<OrderInfo>()
{
new OrderInfo() { Id = ids.First(),Name="a31",Price=11},
new OrderInfo() { Id = ids.Last(),Name="a41"}
})
.ExecuteCommand();
var updateRow3= db.Updateable<OrderInfo>()
.SetColumns(it=>it.Name=="xx")
.Where(it=> it.Id == id)
.ExecuteCommand();2.5 使用原生SQL
db.Ado.ExecuteCommand(@"insertMany UnitSchool123131 [{ ""Name"" : ""XX大學(xué)"" }]");
//C#對象構(gòu)造
var documents = new[]
{
new BsonDocument { { "Name", "XX大學(xué)" } }
};
var bsonArray = new BsonArray(documents).ToJson();
var cmd = $"insertMany UnitSchool123131 {json}";
db.Ado.ExecuteCommand(cmd);
//查詢
var list=db.Ado.SqlQuery<T>(cmd);
var dt=db.Ado.GetDataTable(cmd);
//sqlsugar中獲取原生對象
IMongoDatabase rdb= ((MongoDbConnection)db.Ado.Connection).GetDatabase();
//IMongoDatabase 是什么東西?
//var client = new MongoClient("mongodb://localhost:27017");
//IMongoDatabase database = client.GetDatabase("TestDatabase");3、源碼DEM
https://github.com/DotNetNext/SqlSugar

DEMO 下載 : https://github.com/DotNetNext/SqlSugar
到此這篇關(guān)于.NET中全新的MongoDb ORM框架 - SqlSugar的文章就介紹到這了,更多相關(guān).net MongoDb ORM框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
asp.net生成高質(zhì)量縮略圖通用函數(shù)(c#代碼),支持多種生成方式
這兩天正在研究報表中餅圖的繪圖方法,文章中的某些做法值得參考.2008-08-08
ASP.NET網(wǎng)站偽靜態(tài)下使用中文URL的方法
中文URL是在URL中直接使用漢字,它的好處是可以使用鏈接地址看起來非常直觀易懂,偽靜態(tài)的規(guī)則,是在web.config文件中定義的2014-08-08
.NET CORE中比較兩個文件內(nèi)容是否相同的最快方法
這篇文章主要給大家介紹了關(guān)于.NET CORE中比較兩個文件內(nèi)容是否相同的最快方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用.NET CORE具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
asp.net core MVC之實現(xiàn)基于token的認(rèn)證
這篇文章主要介紹了asp.net core MVC之實現(xiàn)基于token的認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
ASP.NET筆記之文章發(fā)布管理小系統(tǒng)案例
本篇文章小編為大家介紹,ASP.NET筆記之文章發(fā)布管理小系統(tǒng)案例。需要的朋友參考下2013-04-04
asp.net中button控制先執(zhí)行js再執(zhí)行后臺程序的方法
這篇文章主要介紹了asp.net中button控制先執(zhí)行js再執(zhí)行后臺程序的方法,涉及button控件與js的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-01-01

