失眠星球 發表於 2025-7-2 14:02:59

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

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">1、 MongoDB ORM教程</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">1.1 NUGET 安装</a></li><li><a href="#_lab2_0_1">1.2 已支持功能</a></li><li><a href="#_lab2_0_2">1.3 创建DB对象</a></li><li><a href="#_lab2_0_3">1.4 实体类定义(重点注意)</a></li></ul><li><a href="#_label1">2、CRUD用例</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_4">2.1 插入</a></li><li><a href="#_lab2_1_5">2.2 查询</a></li><li><a href="#_lab2_1_6">2.3 删除</a></li><li><a href="#_lab2_1_7">2.4 更新</a></li><li><a href="#_lab2_1_8">2.5 使用原生SQL</a></li></ul><li><a href="#_label2">3、源码DEM</a></li><ul class="second_class_ul"></ul></ul></div><p>.NET中好用的MongoDb ORM很少,选择也很少,所以我打造了一款适合SQL习惯的MongoDb ORM,让用户多一个选择。</p>
<p class="maodian"><a name="_label0"></a></p><h2>1、 MongoDB ORM教程</h2>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>1.1 NUGET 安装</h3>
<div class="jb51code"><pre class="brush:sql;">SqlSugar.MongoDbCore
SqlSugarCore</pre></div>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>1.2 已支持功能</h3>
<p>单表CRUD+分页+排序+简单分组+嵌套文件(类似Json类型)+简单联表</p>
<p class="maodian"><a name="_lab2_0_2"></a></p><h3>1.3 创建DB对象</h3>
<div class="jb51code"><pre class="brush:csharp;">//注册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 =&gt;
{
      it.Aop.OnLogExecuting = (sql, para) =&gt;
      {   //AOP打印SQL
          Console.WriteLine(UtilMethods.GetNativeSql(sql, para));
      };
});
//字符串2种都可以
var ConnectionString = "mongodb://root:123456@222.71.212.3:27017/testDB?authSource=admin";
varConnectionString= "host=222.71.212.3;Port=27017;Database=testDB;Username= root;Password=123456;authSource=admin;replicaSet=";</pre></div>
<p class="maodian"><a name="_lab2_0_3"></a></p><h3>1.4 实体类定义(重点注意)</h3>
<p>主键定义:继承MongoDbBase里面自定义好了主键</p>
<p>外键定义 :设置 ColumnDataType =nameof(ObjectId)</p>
<div class="jb51code"><pre class="brush:csharp;">//继承的MongoDbBase里面已经有了主键,当然你也可以复制出来不用基类
   public class Student:MongoDbBase
   {
       //主键在基类,也可以自个复制出来不用基类
       public string Name { get; set; }
       //外键需要设置ObjectId类型不然存储会的是string
      
       public string SchoolId { get; set; }
   }
//MongoDbBase是ORM自带的一个类,方便你不定义主键
public class MongoDbBase
{
   
    public string Id { get; set; }
}</pre></div>
<p class="maodian"><a name="_label1"></a></p><h2>2、CRUD用例</h2>
<p class="maodian"><a name="_lab2_1_4"></a></p><h3>2.1 插入</h3>
<div class="jb51code"><pre class="brush:csharp;">//插入无返回值
db.Insertable(data).ExecuteCommand();
//插入并将主键赋值到实体
db.Insertable(data).ExecuteCommandIdentityIntoEntity();
//插入返回IDS
var ids= db.Insertable(data).ExecuteReturnPkList&lt;string&gt;();</pre></div>
<p class="maodian"><a name="_lab2_1_5"></a></p><h3>2.2 查询</h3>
<p>MongoDb一般是单表操作比较多,官方并不推荐联表操作一般用json做嵌套文档比较多</p>
<p>不过SqlSugar也支持了联表</p>
<div class="jb51code"><pre class="brush:csharp;">//简单查询
var data2 = db.Queryable&lt;Student&gt;().Where(it =&gt; it.Book.Price == 1).ToList();
//分页
var count = 0;
var list = db.Queryable&lt;School&gt;().OrderBy(it=&gt;it.Name).ToPageList(1,2,ref count);
//json类型(实体定义isjson)
var data2 = db.Queryable&lt;Student&gt;().Where(it =&gt; it.Book.Price == 1).ToList();
//简单联表(目前只能支持这种基本联表)
var list = db.Queryable&lt;Student&gt;()
.LeftJoin&lt;School&gt;((x, y) =&gt; x.SchoolId == y.Id)
.LeftJoin&lt;School&gt;((x, y, z) =&gt; x.SchoolId == z.Id)
.Where((x, y) =&gt;y.Name == "TestSchool")
.Select((x, y,z) =&gt; new
{
      StudentName = x.Name,
      SchoolName = y.Name,
      SchoolName2=z.Name
}).ToList();
//简单分组查询
   var list14 = db.Queryable&lt;OrderInfo&gt;()
   .GroupBy(it =&gt; new { it.Name ,it.Price })
   .Select(it =&gt; new
   {
         key = it.Name,
         Prie=it.Price,
         groupCount = SqlFunc.AggregateCount(it.Id),
         max = SqlFunc.AggregateMax(it.Id),
         min = SqlFunc.AggregateMin(it.Id)
   }).ToList();
//目前不支持导航查询和子查询</pre></div>
<p class="maodian"><a name="_lab2_1_6"></a></p><h3>2.3 删除</h3>
<div class="jb51code"><pre class="brush:csharp;">//根据主键岀队string [] ids= [...]
db.Deleteable&lt;Student&gt;().In(ids).ExecuteCommandAsync()
//根据实体删除,实体要有主键 var delrow = db.Deleteable(data).ExecuteCommand();</pre></div>
<p class="maodian"><a name="_lab2_1_7"></a></p><h3>2.4 更新</h3>
<div class="jb51code"><pre class="brush:csharp;">var updateRow2 = db.Updateable(new List&lt;OrderInfo&gt;()
   {
       new OrderInfo() { Id = ids.First(),Name="a31",Price=11},
       new OrderInfo() { Id = ids.Last(),Name="a41"}
   })
.ExecuteCommand();
   var updateRow3= db.Updateable&lt;OrderInfo&gt;()
    .SetColumns(it=&gt;it.Name=="xx")
    .Where(it=&gt; it.Id == id)
   .ExecuteCommand();</pre></div>
<p class="maodian"><a name="_lab2_1_8"></a></p><h3>2.5 使用原生SQL</h3>
<div class="jb51code"><pre class="brush:csharp;">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&lt;T&gt;(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");</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>3、源码DEM</h2>
<p><a href="https://github.com/DotNetNext/SqlSugar" rel="external nofollow" target="_blank">https://github.com/DotNetNext/SqlSugar</a></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202507/202572140433183.png" /></p>
<p>DEMO 下载 :&nbsp;<a href="https://github.com/DotNetNext/SqlSugar" rel="external nofollow" target="_blank">https://github.com/DotNetNext/SqlSugar</a></p>
頁: [1]
查看完整版本: .NET中全新的MongoDb ORM框架SqlSugar详解(最新)