设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间20 现在时间20 缓存数据 和聪明人交流,和靠谱的人恋爱,和进取的人共事,和幽默的人随行。晚安!

和聪明人交流,和靠谱的人恋爱,和进取的人共事,和幽默的人随行。晚安!

查看: 986|回复: 0

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

[复制链接]

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:10
  • 最近打卡:2024-05-06 22:23:25
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
28
主题
22
精华
0
金钱
95
积分
56
注册时间
2023-9-29
最后登录
2025-9-1

发表于 2025-9-1 02:01:33 | 显示全部楼层 |阅读模式

.NET中好用的MongoDb ORM很少,选择也很少,所以我打造了一款适合SQL习惯的MongoDb ORM,让用户多一个选择。

1、 MongoDB ORM教程

1.1 NUGET 安装

  1. SqlSugar.MongoDbCore
  2. SqlSugarCore
复制代码

1.2 已支持功能

单表CRUD+分页+排序+简单分组+嵌套文件(类似Json类型)+简单联表

1.3 创建DB对象

  1. //注册DLL防止找不到DLL(扔在程序启动时)
  2. InstanceFactory.CustomAssemblies = new System.Reflection.Assembly[] {
  3. typeof(SqlSugar.MongoDb.MongoDbProvider).Assembly };
  4. //db对象(用法和sqlsugar入门中一样)
  5. var db = new SqlSugarClient(new ConnectionConfig()
  6. {
  7. IsAutoCloseConnection = true,
  8. DbType = DbType.MongoDb,
  9. ConnectionString = SqlSugarConnectionString
  10. },
  11. it =>
  12. {
  13. it.Aop.OnLogExecuting = (sql, para) =>
  14. { //AOP打印SQL
  15. Console.WriteLine(UtilMethods.GetNativeSql(sql, para));
  16. };
  17. });
  18. //字符串2种都可以
  19. var ConnectionString = "mongodb://root:123456@222.71.212.3:27017/testDB?authSource=admin";
  20. var ConnectionString = "host=222.71.212.3;Port=27017;Database=testDB;Username= root;Password=123456;authSource=admin;replicaSet=";
复制代码

1.4 实体类定义(重点注意)

主键定义:继承MongoDbBase里面自定义好了主键

外键定义 :设置 ColumnDataType =nameof(ObjectId)

  1. //继承的MongoDbBase里面已经有了主键,当然你也可以复制出来不用基类
  2. public class Student:MongoDbBase
  3. {
  4. //主键在基类,也可以自个复制出来不用基类
  5. public string Name { get; set; }
  6. //外键需要设置ObjectId类型不然存储会的是string
  7. [SqlSugar.SugarColumn(ColumnDataType =nameof(ObjectId))]
  8. public string SchoolId { get; set; }
  9. }
  10. //MongoDbBase是ORM自带的一个类,方便你不定义主键
  11. public class MongoDbBase
  12. {
  13. [SugarColumn(IsPrimaryKey = true, IsOnlyIgnoreInsert = true, ColumnName = "_id")]
  14. public string Id { get; set; }
  15. }
复制代码

2、CRUD用例

2.1 插入

  1. //插入无返回值
  2. db.Insertable(data).ExecuteCommand();
  3. //插入并将主键赋值到实体
  4. db.Insertable(data).ExecuteCommandIdentityIntoEntity();
  5. //插入返回IDS
  6. var ids= db.Insertable(data).ExecuteReturnPkList<string>();
复制代码

2.2 查询

MongoDb一般是单表操作比较多,官方并不推荐联表操作一般用json做嵌套文档比较多

不过SqlSugar也支持了联表

  1. //简单查询
  2. var data2 = db.Queryable<Student>().Where(it => it.Book.Price == 1).ToList();
  3. //分页
  4. var count = 0;
  5. var list = db.Queryable<School>().OrderBy(it=>it.Name).ToPageList(1,2,ref count);
  6. //json类型(实体定义isjson)
  7. var data2 = db.Queryable<Student>().Where(it => it.Book.Price == 1).ToList();
  8. //简单联表(目前只能支持这种基本联表)
  9. var list = db.Queryable<Student>()
  10. .LeftJoin<School>((x, y) => x.SchoolId == y.Id)
  11. .LeftJoin<School>((x, y, z) => x.SchoolId == z.Id)
  12. .Where((x, y) =>y.Name == "TestSchool")
  13. .Select((x, y,z) => new
  14. {
  15. StudentName = x.Name,
  16. SchoolName = y.Name,
  17. SchoolName2=z.Name
  18. }).ToList();
  19. //简单分组查询
  20. var list14 = db.Queryable<OrderInfo>()
  21. .GroupBy(it => new { it.Name ,it.Price })
  22. .Select(it => new
  23. {
  24. key = it.Name,
  25. Prie=it.Price,
  26. groupCount = SqlFunc.AggregateCount(it.Id),
  27. max = SqlFunc.AggregateMax(it.Id),
  28. min = SqlFunc.AggregateMin(it.Id)
  29. }).ToList();
  30. //目前不支持导航查询和子查询
复制代码

2.3 删除

  1. //根据主键岀队string [] ids= [...]
  2. db.Deleteable<Student>().In(ids).ExecuteCommandAsync()
  3. //根据实体删除,实体要有主键 var delrow = db.Deleteable(data).ExecuteCommand();
复制代码

2.4 更新

  1. var updateRow2 = db.Updateable(new List<OrderInfo>()
  2. {
  3. new OrderInfo() { Id = ids.First(),Name="a31",Price=11},
  4. new OrderInfo() { Id = ids.Last(),Name="a41"}
  5. })
  6. .ExecuteCommand();
  7. var updateRow3= db.Updateable<OrderInfo>()
  8. .SetColumns(it=>it.Name=="xx")
  9. .Where(it=> it.Id == id)
  10. .ExecuteCommand();
复制代码

2.5 使用原生SQL

  1. db.Ado.ExecuteCommand(@"insertMany UnitSchool123131 [{ ""Name"" : ""XX大学"" }]");
  2. //C#对象构造
  3. var documents = new[]
  4. {
  5. new BsonDocument { { "Name", "XX大学" } }
  6. };
  7. var bsonArray = new BsonArray(documents).ToJson();
  8. var cmd = $"insertMany UnitSchool123131 {json}";
  9. db.Ado.ExecuteCommand(cmd);
  10. //查询
  11. var list=db.Ado.SqlQuery<T>(cmd);
  12. var dt=db.Ado.GetDataTable(cmd);
  13. //sqlsugar中获取原生对象
  14. IMongoDatabase rdb= ((MongoDbConnection)db.Ado.Connection).GetDatabase();
  15. //IMongoDatabase 是什么东西?
  16. //var client = new MongoClient("mongodb://localhost:27017");
  17. //IMongoDatabase database = client.GetDatabase("TestDatabase");
复制代码

3、源码DEM

https://github.com/DotNetNext/SqlSugar

1.png

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

到此这篇关于.NET中全新的MongoDb ORM框架 - SqlSugar的文章就介绍到这了,更多相关.net MongoDb ORM框架内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表