首页 编程语言 .NET中全新的MongoDb ORM框架 - SqlSugar

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

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

1、 MongoDB ORM教程
1.1 NUGET 安装
SqlSugar.MongoDbCore
SqlSugarCore
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)

复制代码
//继承的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<string>();
复制代码
2.2 查询
MongoDb一般是单表操作比较多,官方并不推荐联表操作一般用json做嵌套文档比较多

不过SqlSugar也支持了联表

复制代码
//简单查询
var data2 = db.Queryable<Student>().Where(it => it.Book.Price == 1).ToList();

//分页
var count = 0;
var list = db.Queryable<School>().OrderBy(it=>it.Name).ToPageList(1,2,ref count);

//json类型(实体定义isjson)
var data2 = db.Queryable<Student>().Where(it => it.Book.Price == 1).ToList();

//简单联表(目前只能支持这种基本联表)
var list = db.Queryable<Student>()
.LeftJoin<School>((x, y) => x.SchoolId == y.Id)
.LeftJoin<School>((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<OrderInfo>()
.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<Student>().In(ids).ExecuteCommandAsync()
//根据实体删除,实体要有主键 var delrow = db.Deleteable(data).ExecuteCommand();
2.4 更新
复制代码
var updateRow2 = db.Updateable(new List<OrderInfo>()
{
new OrderInfo() { Id = ids.First(),Name="a31",Price=11},
new OrderInfo() { Id = ids.Last(),Name="a41"}
})
.ExecuteCommand();

var updateRow3= db.Updateable<OrderInfo>()
.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<T>(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");
复制代码

3、源码DEM
https://github.com/DotNetNext/SqlSugar

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

站星网

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

为您推荐

.net webapi 接收图片保存到服务器,并居中剪裁压缩图片

每天解决一些c#小问题,在写微信小程序,或者一些手机软件接口,我们经常要用到上传图片到服务器,或者使用图床去保存我们的图片。这次就简单明了的来梳理一下如何实现图片的接受和对接受到的图片进行一些处理。一、..

.net入行第5年

没错 我在2024-06-28发布了我的三年.net感想时隔一年,我又来分享了 这一年的时间真的没有经过逛博客园 ,每天都在忙首先,恭喜一下自己 —— 我现在也算是一个小老板了(虽然主业还是程序员 )。毕竟还年轻,想多尝..

ASP.Net Core WebApi几种版本控制对比

一、版本控制的好处:(1)有助于及时推出功能, 而不会破坏现有系统。(2)它还可以帮助为选定的客户提供额外的功能。API 版本控制可以采用不同的方式进行控制,方法如下:(1)在URL 中追加版本或作为查询字符串参..

.NET CORE 设置cookie以及获取cookie

使用我这个方式的前提是在mvc中,确认你安装了:Microsoft.AspNetCore.Mvc.然后在继承了Controller的类型中使用我所说的方法。直接使用即可,我是封装了方法供我自己使用,代码如下: public abstract class Control..

值得探索的 8 个机器学习 JavaScript 框架

JavaScript开发人员倾向于寻找可用于机器学习模型训练的JavaScript框架。下面是一些机器学习算法,基于这些算法可以使用本文中列出的不同JavaScript框架来模型训练:简单的线性回归多变量线性回归逻辑回归朴素贝叶斯..

.net环境下跨进程、高频率读写数据

一、需求背景1、最近项目要求高频次地读写数据,数据量也不是很大,多表总共加起来在百万条上下。单表最大的也在25万左右,历史数据表因为不涉及所以不用考虑,难点在于这个规模的热点数据,变化非常频繁。数据来源..

记录荒废了三年的四年.net开发的第一次面试

对象身在成都小微企业,前两天面试深圳老牌金蝶公司。对我这个荒废了三年光影的人来说,怎一个跨度之大了得?作为人我生第一次面试的,整个面试过程,只能用诡异来形容这次感受。而结尾也是迷迷糊糊中草草收场。不是..

记录荒废了三年的四年.net开发的第二次面试

这次面试的是小公司,深圳计通智能,面试分为初试和复试。使用腾讯视频会议完成。相比与上次面试,这次有所进步,进复试了。当然,这可能也与面试风格有关。这次面试着重与项目经历和技术,因此回答比较顺畅。这一周..

BotSharp 基于 .NET 平台的开源 AI 聊天机器人框架

BotSharp 是一个开源的、基于 .NET 平台的 AI 聊天机器人框架,旨在简化构建智能对话系统的过程。它主要通过自然语言处理(NLP)技术,帮助开发者构建具备语言理解和对话能力的应用。BotSharp 提供了丰富的功能和扩..

.NET 游戏开发框架有哪些?

在游戏开发领域,.NET 框架因其强大的功能和灵活性而广受欢迎。对于希望使用 .NET 进行游戏开发的开发者来说,了解可用的框架是至关重要的。以下是一些流行的 .NET 游戏开发框架:1. Unity: 尽管 Unity 主要使用 C# ..

PluginCore 基于 ASP.NET Core 的轻量级插件框架

项目概述PluginCore 是一个基于 ASP.NET Core 的轻量级插件框架,旨在简化插件的集成与管理。通过最少的配置,开发者可以快速集成并专注于业务逻辑的开发。它支持动态 WebAPI、插件隔离与共享、前后端分离、热插拔等..

.NET框架和CLR的工作原理?

.NET 框架和 CLR(公共语言运行时,Common Language Runtime)共同构成了一个应用程序运行和开发的环境,为多种编程语言提供跨平台支持、内存管理、异常处理、安全性、以及其他服务。它们各自的工作原理如下:.NET F..

十大前端开发框架

编者按:考虑到英文原文的长度以及可读性,十大前端开发框架将分成上下两部分呈现给大家。上半部分着重讲的是Bootstrap家族框架,第二节将会跟大家分享更多其他的框架。随着互联网的不断成熟以及我们越来越多的用各..

跨平台UI框架 MAUI Avalonia Flutter怎么选?

选择跨平台 UI 框架取决于你的项目需求、目标平台、开发团队的技能和框架的特点。以下是 MAUI、Avalonia 和 Flutter 的比较,帮助你做出合适的选择。1. .NET MAUI (Multi-platform App UI)微软推出的跨平台框架,可..

尤雨溪成立VoidZero 成前端开发主流框架

尤雨溪和他的虚空帝国:VoidZero,一场前端的创世纪!2024年初秋,一个名字,VoidZero,如同代码中突然插入的一行神秘指令,瞬间扰乱了前端世界的平静。而这行指令的编写者,正是前端界的传奇,Vue.js之父—&md..

强大的 .NET Mock 框架 单元测试模拟库Moq使用教程

单元测试是确保代码质量和可靠性的重要手段。当我们的代码依赖于外部系统、数据库或第三方服务时,编写有效的单元测试可能会变得复杂且耗时。为了简化这一过程,模拟(Mocking)技术应运而生。在 .NET 生态系统中,M..

c#使用MongoDB开发LBS应用

MongoDB下载地址 http://www.mongodb.org/downloads .NET驱动 https://github.com/mongodb/mongo-csharp-driver MongoDB常用命令: 成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据..

什么是.NET框架?它的主要组成部分是什么?

.NET框架是由微软公司开发的一个软件开发平台,用于构建和运行各种类型的应用程序,包括桌面应用程序、Web应用程序、移动应用程序和服务。它提供了一个统一的环境,使开发人员能够使用多种编程语言(如C#、VB.NET和F..

2023年主流的前端框架有哪些?

当前主流的前端框架当前主流的前端框架有React,Angular,Vue.js,还有一些相对小众但也具有一定影响力的框架,例如 Svelte、Ember、Backbone 等。React:React 是一个由 Facebook 开发的 JavaScript 库,专注于构建..

windows桌面应用GUI框架选择及其优缺点

Windows桌面应用的GUI框架有多种,常见的包括:Windows Presentation Foundation(WPF)、Windows Forms、WinUI3、Electron等。WPF是.Net Framework3.0引入的GUI框架,使用XAML定义用户界面,支持强大的数据绑定,支..

发表回复

返回顶部

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制