.NET中全新的MongoDb ORM框架SqlSugar详解(最新)
SqlSugar是针对.NET的MongoDBORM框架,支持单表增删改查、分页、排序、简单分组、嵌套文档以及联表操作等核心功能。实体类继承MongoDbBase可自动获取主键,外键需指定为ObjectId类型。此外还支持原生SQL语句查询,并可获取IMongoDatabase对象,提升开发效率。
.NET生态中,好用的MongoDB ORM屈指可数,选择面确实窄。所以后来干脆自己动手做了一款,既能照顾到SQL开发者的使用习惯,也让有类似需求的朋友能多一个选项。
1、 MongoDB ORM教程
1.1 NUGET 安装
SqlSugar.MongoDbCoreSqlSugarCore
1.2 已支持功能
单表CRUD + 分页 + 排序 + 简单分组 + 嵌套文档(类似Json类型) + 简单联表,日常开发中的常见操作基本都覆盖了。
1.3 创建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,基类里已经帮你搞定了主键。外键则需要额外指定 ColumnDataType = nameof(ObjectId),这样才能保证存储的是 ObjectId 类型,而不是普通字符串。
//继承的MongoDbBase里面已经有了主键,当然你也可以复制出来不用基类
public class Student : MongoDbBase
{
public string Name { get; set; }
//外键需要设置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();
2.2 查询
MongoDB 在大多数场景下还是推荐单表操作,官方本身也不鼓励联表——它的强项是嵌套文档。不过,SqlSugar 还是顺手把这个功能加上了,方便那些确实需要 join 的场景。
//简单查询 var data2 = db.Queryable().Where(it => it.Book.Price == 1).ToList(); //分页 var count = 0; var list = db.Queryable ().OrderBy(it => it.Name).ToPageList(1, 2, ref count); //json类型(实体定义isjson) var data2 = db.Queryable ().Where(it => it.Book.Price == 1).ToList(); //简单联表(目前只能支持这种基本联表) var list = db.Queryable () .LeftJoin ((x, y) => x.SchoolId == y.Id) .LeftJoin ((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 () .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(); //目前不支持导航查询和子查询
2.3 删除
//根据主键删除 string[] ids = [...]; db.Deleteable().In(ids).ExecuteCommandAsync(); //根据实体删除,实体要有主键 var delrow = db.Deleteable(data).ExecuteCommand();
2.4 更新
var updateRow2 = db.Updateable(new List() { new OrderInfo() { Id = ids.First(), Name = "a31", Price = 11 }, new OrderInfo() { Id = ids.Last(), Name = "a41" } }) .ExecuteCommand(); var updateRow3 = db.Updateable () .SetColumns(it => it.Name == "xx") .Where(it => it.Id == id) .ExecuteCommand();
2.5 使用原生SQL
db.Ado.ExecuteCommand(@"insertMany UnitSchool123131 [{ ""Name"" : ""XX大学"" }]");
//C#对象构造
var documents = new[]
{
new BsonDocument { { "Name", "XX大学" } }
};
var bsonArray = new BsonArray(documents).ToJson();
var cmd = $"insertMany UnitSchool123131 {json}";
db.Ado.ExecuteCommand(cmd);
//查询
var list = db.Ado.SqlQuery(cmd);
var dt = db.Ado.GetDataTable(cmd);
//sqlsugar中获取原生对象IMongoDatabase
IMongoDatabase rdb = ((MongoDbConnection)db.Ado.Connection).GetDatabase();
//IMongoDatabase 是什么东西?
//var client = new MongoClient("mongodb://localhost:27017");
//IMongoDatabase database = client.GetDatabase("TestDatabase");
3、源码DEM
完整源码和示例代码在 GitHub 上:https://github.com/DotNetNext/SqlSugar

WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。
Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理工具,可在 Windows 上完成照片修饰、选区抠图、图层合成、文字排版、绘画及生成式编辑。软件采用订阅授权,由 Creative Cloud 管理安装、更新与许
Adobe InDesign 是面向印刷与数字出版的专业页面排版工具,可制作书籍、杂志、宣传册、海报、交互式 PDF 和电子书。它提供精细的文字样式、多页面管理、印前检查及多格式输出能力,并能与 Photoshop、Illustrator
Adobe Illustrator 是用于绘制矢量图形、插画、图标、徽标和版式的专业设计工具。它以路径和锚点为核心,作品放大后仍能保持清晰,并提供画板、文字、渐变、图像描摹及精确变换等功能,适合品牌视觉、印刷物料、数字界面和商业插画创作。













