商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > .NET中全新的MongoDb ORM框架SqlSugar详解(最新)

.NET中全新的MongoDb ORM框架SqlSugar详解(最新)

  发布于2026-07-23 阅读(0)

扫一扫,手机访问

.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

.NET中全新的MongoDb ORM框架SqlSugar详解(最新)

DEMO 下载:https://github.com/DotNetNext/SqlSugar

本文转载于:https://www.jb51.net/aspnet/344685ngf.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注