当前位置: 首页 > news >正文

.net core API中使用LiteDB

LiteDB介绍

LiteDB 是一个小巧、快速和轻量级的 .NET NoSQL 嵌入式数据库。

  • 无服务器的 NoSQL 文档存储
  • 简单的 API,类似于 MongoDB
  • 100% 的 C# 代码支持 .NET 4.5 / NETStandard 1.3/2.0,以单个 DLL(不到 450KB)形式提供
  • 线程安全
  • 支持 ACID,完整的事务支持
  • 写入失败后的数据恢复(WAL 日志文件)
  • 使用 DES(AES)加密算法对数据文件进行加密
  • 使用属性或流畅的映射器 API 将 POCO 类映射为 BsonDocument
  • 存储文件和流数据(类似于 MongoDB 的 GridFS)
  • 单一数据文件存储(类似于 SQLite)
  • 对文档字段建立索引以实现快速搜索
  • 支持 LINQ 查询
  • 提供类似于 SQL 的命令来访问/转换数据
  • LiteDB Studio - 数据访问的精美用户界面
  • 开源且免费供所有人使用,包括商业用途

nuget安装

dotnet add package LiteDB --version 5.0.21

BsonRef定义关联关系

using LiteDB;namespace LiteDBAPI.Models
{public class Customer:BaseClass{[BsonField("customername")]public string Name { get; set; }}public class Order: BaseClass{[BsonField("price")]public double Price { get; set; }[BsonRef("customers")]public Customer Customer { get; set; }}public class BaseClass{[BsonId]public ObjectId ID { get; set; }}
}

封装helper

using LiteDB;
using LiteDBAPI.Models;
using System.Linq.Expressions;namespace LiteDBAPI
{public class LiteDBHelper{public readonly LiteDatabase db;public LiteDBHelper(){db = new LiteDatabase("Filename=database.db;Password=1234;Connection=shared");}public BsonValue insert<T>(T value,string collectionName){// Get a collection (or create, if doesn't exist)var col = db.GetCollection<T>(collectionName);// Insert new customer document (Id will be auto-incremented)return col.Insert(value); }public T getOrder<T, TRelated>(string orderid,string collectionName, Expression<Func<T, TRelated>> includeExpression) where T : BaseClass{ObjectId objectId = new ObjectId(orderid);var col = db.GetCollection<T>(collectionName);return col.Query().Where(x =>x.ID== objectId).Include(includeExpression).FirstOrDefault();}public bool update<T>(T instance,string collectionName){var col = db.GetCollection<T>(collectionName);return col.Update(instance);}public List<T> queryByCondition<T>(string collectionName,Dictionary<string,string> keyValuePairs){var col = db.GetCollection<T>(collectionName);// Create a list to hold individual query expressionsvar queryList = new List<BsonExpression>();BsonExpression? combinedQuery = null;// Loop through the key-value pairs and create equality conditionsforeach (var pair in keyValuePairs){queryList.Add(Query.EQ(pair.Key, pair.Value));}if (queryList.Count>1){// Combine the individual conditions into an AND querycombinedQuery = Query.And(queryList.ToArray());}else{combinedQuery = queryList[0];}// Execute the query and return the results as a listreturn col.Find(combinedQuery).ToList();}}
}

controller使用

using LiteDB;
using LiteDBAPI.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;namespace LiteDBAPI.Controllers
{[Route("api/[controller]/[action]")][ApiController]public class LiteDBController : ControllerBase{private readonly LiteDBHelper db;public LiteDBController(LiteDBHelper db){this.db = db;}[HttpPost]public IActionResult insert([FromBody] string customername){Customer customer = new Customer() { Name = customername };// customerthis.db.insert(customer, "customers");// orderthis.db.insert(new Order() { Customer=customer }, "orders");return Ok(new { result="success"});}[HttpGet]public Order getOrder([FromQuery] string orderid){return db.getOrder<Order,Customer>(orderid,"orders",x=>x.Customer);}[HttpPut]public IActionResult updatePrice([FromQuery] string orderid){Order order = db.getOrder<Order, Customer>(orderid, "orders", x => x.Customer);order.Price =order.Price + 100;return Ok(db.update<Order>(order, "orders"));}[HttpPost]public List<Customer> getCustomer([FromBody] Dictionary<string,string> keyValuePairs){return db.queryByCondition<Customer>("customers",keyValuePairs);}}
}

加密

通过更改连接参数,添加password实现

官网

代码

相关文章:

.net core API中使用LiteDB

LiteDB介绍 LiteDB 是一个小巧、快速和轻量级的 .NET NoSQL 嵌入式数据库。 无服务器的 NoSQL 文档存储简单的 API&#xff0c;类似于 MongoDB100% 的 C# 代码支持 .NET 4.5 / NETStandard 1.3/2.0&#xff0c;以单个 DLL&#xff08;不到 450KB&#xff09;形式提供线程安全…...

YOLO_V8分割

YOLO_V8分割 YOLO安装 pip install ultralytics YOLO的数据集转化看csdn 数据标注EIseg EIseg这块&#xff0c;正常安装就好&#xff0c;但是numpy和各类包都容易有冲突&#xff0c;python版本装第一点 数据标注过程中&#xff0c;记得把JSON和COCO都点上&#xff0c;把自…...

根据请求错误的状态码判断代理配置问题

SafeLine&#xff0c;中文名 “雷池”&#xff0c;是一款简单好用, 效果突出的 Web 应用防火墙(WAF)&#xff0c;可以保护 Web 服务不受黑客攻击。 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注入、命…...

Python 网络爬虫高阶用法

网络爬虫成为了自动化数据抓取的核心工具。Python 拥有强大的第三方库支持&#xff0c;在网络爬虫领域的应用尤为广泛。本文将深入探讨 Python 网络爬虫的高阶用法&#xff0c;包括处理反爬虫机制、动态网页抓取、分布式爬虫以及并发和异步爬虫等技术。以下内容结合最新技术发展…...

芯片Tapeout前GDS Review | Calibre中如何切出gds中指定区域版图?

在SoC芯片实现阶段我们会用到很多模拟IP&#xff0c;IO。对于这类模拟IP相关的电源连接&#xff0c;ESD保护电路连接&#xff0c;信号线连接都需要跟IP Vendor进行Review。但芯片整体版图涉及商业机密&#xff0c;我们不希望整个芯片的版图被各大vendor看到&#xff0c;因此我们…...

43 | 单例模式(下):如何设计实现一个集群环境下的分布式单例模式?

上两篇文章中&#xff0c;我们针对单例模式&#xff0c;讲解了单例的应用场景、几种常见的代码实现和存在的问题&#xff0c;并粗略给出了替换单例模式的方法&#xff0c;比如工厂模式、IOC 容器。今天&#xff0c;我们再进一步扩展延伸一下&#xff0c;一块讨论一下下面这几个…...

PHP如何解决异常处理

在PHP中&#xff0c;异常处理是通过使用try、catch、throw以及finally这几个关键字来实现的。以下是一个简单的介绍和示例&#xff1a; 异常处理的基本步骤 抛出异常&#xff1a; 使用throw关键字抛出一个异常对象。异常对象通常是Exception类或其子类的实例。 捕获异常&…...

C++ socket编程(3)

前面文章&#xff0c;介绍了一个简单socket通讯Demo&#xff0c; 客户端和服务器进行简单的交互。两个代码都很简单&#xff0c;如果情况一复杂&#xff0c;就会出错。这节我们把代码完善一下&#xff0c;实现一个客户端输入&#xff0c;发送&#xff0c;服务器echo的交互。本文…...

Collection-LinkedList源码解析

文章目录 概述LinkedList实现底层数据结构构造函数getFirst(), getLast()removeFirst(), removeLast(), remove(e), remove(index)add()addAll()clear()Positional Access 方法查找操作 概述 LinkedList同时实现了List接口和Deque接口&#xff0c;也就是说它既可以看作一个顺序…...

vue判断对象数组里是否有重复数据

TOCvue判断对象数组里是否有重复数据 try {//通过产品编码赛选出新的数组 在比较let names this.goodsJson.map(item > item["productCode"]);let nameSet new Set(names)if (nameSet.size ! names.length) {this.$message({message: 警告&#xff01;产品选项…...

CSS 3D转换

在 CSS 中&#xff0c;除了可以对页面中的元素进行 2D 转换外&#xff0c;您也可以对象元素进行 3D转换&#xff08;将页面看作是一个三维空间来对页面中的元素进行移动、旋转、缩放和倾斜等操作&#xff09;。与 2D 转换相同&#xff0c;3D 转换同样不会影响周围的元素&#x…...

51单片机数码管循环显示0~f

原理图&#xff1a; #include <reg52.h>sbit dulaP2^6;//段选信号 sbit welaP2^7;//位选信号unsigned char num;//数码管显示的数字0~funsigned char code table[]{ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//定义数码管显…...

【编程进阶知识】Java NIO:掌握高效的I/O多路复用技术

Java NIO&#xff1a;掌握高效的I/O多路复用技术 摘要&#xff1a; 本文将带你深入了解Java NIO&#xff08;New I/O&#xff09;中的Selector类&#xff0c;探索如何利用它实现高效的I/O多路复用&#xff0c;类似于Linux中的select和epoll系统调用。文章将提供详细的代码示例…...

vscode创建flutter项目,运行flutter项目

打开View&#xff08;查看&#xff09; > Command Palette...&#xff08;命令面板&#xff09;。 可以按下 Ctrl / Cmd Shift P 输入 flutter 选择Flutter: New Project 命令 按下 Enter 。选择Application 选择项目地址 输入项目名称 。按下 Enter 等待项目初始化完成 …...

STM32之CAN外设

相信大家在学习STM32系列的单片机时&#xff0c;在翻阅芯片的数据手册时&#xff0c;都会看到这么一个寄存器外设——CAN外设寄存器。那么&#xff0c;大家知道这个外设的工作原理以及该如何使用吗&#xff1f;这节的内容将会详细介绍STM32上的CAN外设&#xff0c;文章结尾附有…...

【阅读笔记】水果轻微损伤的无损检测技术应用

一、水果轻微损伤检测技术以及应用 无损检测技术顾名思义就是指在不破坏水果样品完整性的情况下对样品进行品质鉴定。目前比较常用的农产品水果类无损检测法有&#xff1a;基于红外热成像、机器视觉技术的图像处理方法、光谱检测技术、介电特性技术检测法等。 1.1 基于红外热…...

忘记7-zip密码,如何解压文件?

7z压缩包设置了密码&#xff0c;解压的时候就需要输入正确对密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了7z压缩包的密码…...

SpringBoot基础(一)

1.SpringBoot简介 Spring Boot是Spring社区发布的一个开源项目&#xff0c;旨在帮助开发者快速并且更简单的构建项目。它 使用习惯优于配置的理念让你的项目快速运行起来&#xff0c;使用Spring Boot很容易创建一个独立运行 &#xff08;运行jar&#xff0c;内置Servlet容器&am…...

Java智能匹配灵活用工高效人力资源管理系统小程序源码

智能匹配灵活用工高效人力资源管理系统 &#x1f4bc;&#x1f680; &#x1f680; 开篇&#xff1a;职场新风尚&#xff0c;智能匹配引领变革 在这个瞬息万变的时代&#xff0c;职场也在经历着前所未有的变革。传统的用工模式已难以满足现代企业的需求&#xff0c;而“智能匹…...

openpdf

1、简介 2、示例 2.1 引入依赖 <dependency><groupId>com.github.librepdf</groupId><artifactId>openpdf</artifactId><version>1.3.34</version></dependency><dependency><groupId>com.github.librepdf</…...

用C++模拟堆宝塔游戏:PTA L2-045题解与STL vector实战

用C模拟堆宝塔游戏&#xff1a;PTA L2-045题解与STL vector实战 堆宝塔游戏是一个有趣的逻辑挑战&#xff0c;它要求玩家根据彩虹圈的直径大小&#xff0c;按照特定规则将它们堆叠成宝塔。这个游戏不仅考验玩家的逻辑思维能力&#xff0c;还能帮助我们深入理解C中STL容器的使用…...

微软:小模型替代大模型执行终端任务

&#x1f4d6;标题&#xff1a;Terminus-4B: Can a Smaller Model Replace Frontier LLMs at Agentic Execution Tasks? &#x1f310;来源&#xff1a;arXiv, 2605.03195v1 &#x1f6ce;️文章简介 &#x1f538;研究问题&#xff1a;在代码智能体的终端执行子任务中&#x…...

BFloat16指令集与矩阵乘法优化技术详解

1. BFloat16指令集概述BFloat16&#xff08;Brain Floating Point 16&#xff09;是Google Brain团队提出的一种16位浮点格式&#xff0c;专为深度学习应用优化。这种格式保留了与IEEE 754单精度浮点数&#xff08;FP32&#xff09;相同的8位指数位&#xff0c;但将尾数位从23位…...

别再被AD值乱跳搞懵了!CS1237电子秤芯片的5个硬件设计避坑点(附电路图)

别再被AD值乱跳搞懵了&#xff01;CS1237电子秤芯片的5个硬件设计避坑点&#xff08;附电路图&#xff09; 电子秤设计中最令人头疼的莫过于AD值不稳定问题。作为一款高精度Σ-Δ ADC芯片&#xff0c;CS1237在电子秤、压力测量等领域应用广泛&#xff0c;但硬件设计中的细微偏差…...

SC4541SKTRT 2MHz 2.9V~22V升/降压单线LED驱动器Semtech电子元器件IC芯片

SC4541SKTRT是Semtech&#xff08;升特&#xff09;推出的高频LED驱动器芯片&#xff0c;该器件集升压与降压拓扑于一体&#xff0c;支持2.9V至22V超宽输入电压并具备25V输出电压能力&#xff0c;利用内置肖特基二极管和功率开关&#xff0c;将外部电路减至最少&#xff0c;实现…...

思科CCNA认证备考:从题库到实战,这11个章节的易错点你踩过几个?

思科CCNA认证通关指南&#xff1a;11大核心章节的深度避坑策略 从题库到实战的认知跃迁 当您翻开CCNA的备考资料时&#xff0c;是否曾感到困惑——即使熟记题库答案&#xff0c;在实际操作和模拟考试中仍频频出错&#xff1f;这种现象在认证考生中极为普遍。问题的根源往往不在…...

【免费下载】 华为光猫超级用户名密码获取工具

华为光猫超级用户名密码获取工具 【下载地址】华为光猫超级用户名密码获取工具 华为光猫超级用户名密码获取工具是一款专为华为光猫设计的辅助工具&#xff0c;主要用于获取光猫的VLAN ID。该工具通过将一系列命令编写成批处理文件&#xff0c;实现自动化执行&#xff0c;无需用…...

TVA智能体范式的工业视觉革命(4)

重磅预告&#xff1a;本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容&#xff0c;该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著&#xff0c;特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

别再只用人体红外了!聊聊24.125GHz微波模块在智能家居中的另类玩法与局限

24.125GHz微波传感模块的智能家居创新应用与工程实践 在智能家居领域&#xff0c;人体感应技术早已从简单的红外探测走向多传感器融合时代。当大多数开发者还在依赖传统PIR红外传感器时&#xff0c;一种成本仅20元左右的24.125GHz微波模块正在小众硬件圈引发讨论。这种原本用于…...

抖音下载器技术架构解析:从零构建高效内容采集系统

抖音下载器技术架构解析&#xff1a;从零构建高效内容采集系统 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support.…...