找回密码
 立即注册
首页 业界区 业界 .NET中全新的MongoDb ORM框架 - SqlSugar

.NET中全新的MongoDb ORM框架 - SqlSugar

焦听云 7 天前
.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.   
  5. //db对象(用法和sqlsugar入门中一样)
  6.   var db = new SqlSugarClient(new ConnectionConfig()
  7.   {
  8.       IsAutoCloseConnection = true,
  9.       DbType = DbType.MongoDb,
  10.       ConnectionString = SqlSugarConnectionString
  11.   },
  12.   it =>
  13.   {
  14.       it.Aop.OnLogExecuting = (sql, para) =>
  15.       {   //AOP打印SQL
  16.           Console.WriteLine(UtilMethods.GetNativeSql(sql, para));
  17.       };
  18.   });
  19.    
  20.    
  21. //字符串2种都可以
  22. var ConnectionString = "mongodb://root:123456@222.71.212.3:27017/testDB?authSource=admin";
  23. 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.         
  7.        //外键需要设置ObjectId类型不然存储会的是string
  8.        [SqlSugar.SugarColumn(ColumnDataType =nameof(ObjectId))]
  9.        public string SchoolId { get; set; }
  10.    }
  11.    
  12.    
  13. //MongoDbBase是ORM自带的一个类,方便你不定义主键
  14. public class MongoDbBase
  15. {
  16.     [SugarColumn(IsPrimaryKey = true, IsOnlyIgnoreInsert = true, ColumnName = "_id")]
  17.     public string Id { get; set; }
  18. }
复制代码
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. //简单分组查询
  21.    var list14 = db.Queryable<OrderInfo>()
  22.      .GroupBy(it => new { it.Name ,it.Price })
  23.      .Select(it => new
  24.      {
  25.          key = it.Name,
  26.          Prie=it.Price,
  27.          groupCount = SqlFunc.AggregateCount(it.Id),
  28.          max = SqlFunc.AggregateMax(it.Id),
  29.          min = SqlFunc.AggregateMin(it.Id)
  30.      }).ToList();
  31.       
  32.   //目前不支持导航查询和子查询
复制代码
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.   
  8.    var updateRow3= db.Updateable<OrderInfo>()
  9.     .SetColumns(it=>it.Name=="xx")
  10.     .Where(it=> it.Id == id)
  11.    .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.   
  14.   
  15. //sqlsugar中获取原生对象
  16. IMongoDatabase rdb= ((MongoDbConnection)db.Ado.Connection).GetDatabase();
  17. //IMongoDatabase 是什么东西?
  18. //var client = new MongoClient("mongodb://localhost:27017");
  19. //IMongoDatabase database = client.GetDatabase("TestDatabase");
复制代码
 
3、源码DEM

https://github.com/DotNetNext/SqlSugar 
1.png

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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册