七天.NET 8操作SQLite入门到实战 - 第五天引入SQLite-net ORM并封装常用方法(SQLiteHelper)

前言

上一章节我们搭建好了EasySQLite的前后端框架,今天我们的主要任务是在后端框架中引入SQLite-net ORM并封装常用方法(SQLiteHelper)。

七天.NET 8操作SQLite入门到实战详细教程

  • 第一天 SQLite 简介
  • 第二天 在 Windows 上配置 SQLite环境
  • 第三天SQLite快速入门
  • 第四天EasySQLite前后端项目框架搭建

EasySQLite项目源码地址

GitHub地址:GitHub - YSGStudyHards/EasySQLite: 七天.NET 8操作SQLite入门到实战详细教程

SQLite-net介绍

简单、强大、跨平台的 SQLite 客户端和 .NET 的 ORM。

  • GitHub开源地址:GitHub - praeclarum/sqlite-net: Simple, powerful, cross-platform SQLite client and ORM for .NET

SQLite-net提供了以下四个包:

PackageDescriptionPackage Address
sqlite-net-pcl.NET Standard 库https://www.nuget.org/packages/sqlite-net-pcl
sqlite-net-sqlcipher支持加密https://www.nuget.org/packages/sqlite-net-sqlcipher
sqlite-net-static使用平台提供的 sqlite3 的 P/Invokes 的特殊版本https://www.nuget.org/packages/sqlite-net-static
sqlite-net-base使用 SQLitePCLRaw 捆绑包,以便您可以选择自己的提供程序https://www.nuget.org/packages/sqlite-net-base

SQLite-net 设计目标

SQLite-net 被设计为一个快速便捷的数据库层。其设计遵循以下目标:

  • 非常容易与现有项目集成,并在所有 .NET 平台上运行。
  • 对 SQLite 的薄包装,快速高效。(这个库不应该成为查询性能的瓶颈。)
  • 提供非常简单的方法来安全执行 CRUD 操作和查询(使用参数),以及以强类型方式检索这些查询结果。
  • 在不强制更改类的情况下与数据模型一起工作。(包含一个小型的反射驱动 ORM 层。)

安装 sqlite-net-pcl  Nuget包

搜索sqlite-net-pcl,选择最新稳定版本进行安装:

SQLite同步和异步方法帮助类

SQLiteHelper

    /// <summary>/// SQLite同步方法帮助类/// 作者:追逐时光者/// 创建时间:2023年11月30日/// </summary>/// <typeparam name="T"></typeparam>public class SQLiteHelper<T> where T : new(){private readonly string _databasePath = Path.Combine(Environment.CurrentDirectory, "ClassManagement.db");private readonly SQLiteConnection _connection; // SQLite连接对象/// <summary>/// 构造函数/// </summary>public SQLiteHelper(){// 创建SQLite连接对象并打开连接_connection = new SQLiteConnection(_databasePath);_connection.CreateTable<T>(); // 如果表不存在,则创建该表[不会创建重复的表]}/// <summary>/// 数据插入/// </summary>/// <param name="item">要插入的数据项</param>/// <returns></returns>public int Insert(T item){return _connection.Insert(item);}/// <summary>/// 数据删除/// </summary>/// <param name="id">要删除的数据的主键ID</param>/// <returns></returns>public int Delete(int id){return _connection.Delete<T>(id);}/// <summary>/// 数据更新/// </summary>/// <param name="item">要更新的数据项</param>/// <returns></returns>public int Update(T item){return _connection.Update(item);}/// <summary>/// 根据条件查询记录/// </summary>/// <param name="predExpr">查询条件</param>/// <returns></returns>public List<T> Query(Expression<Func<T, bool>> predExpr){return _connection.Table<T>().Where(predExpr).ToList();}/// <summary>/// 查询所有数据/// </summary>/// <returns></returns>public List<T> QueryAll(){return _connection.Table<T>().ToList();}/// <summary>/// 根据条件查询单条记录/// </summary>/// <param name="predExpr">查询条件</param>/// <returns></returns>public T QuerySingle(Expression<Func<T, bool>> predExpr){return _connection.Table<T>().Where(predExpr).FirstOrDefault();}}

SQLiteAsyncHelper

    /// <summary>/// SQLite异步方法帮助类/// 作者:追逐时光者/// 创建时间:2023年11月30日/// </summary>/// <typeparam name="T"></typeparam>public class SQLiteAsyncHelper<T> where T : new(){private readonly string _databasePath = Path.Combine(Environment.CurrentDirectory, "ClassManagement.db");private readonly SQLiteAsyncConnection _connectionAsync; // SQLite连接对象/// <summary>/// 构造函数/// </summary>public SQLiteAsyncHelper(){// 创建SQLite连接对象并打开连接_connectionAsync = new SQLiteAsyncConnection(_databasePath);_connectionAsync.CreateTableAsync<T>(); // 如果表不存在,则创建该表[不会创建重复的表]}/// <summary>/// 数据插入/// </summary>/// <param name="item">要插入的数据项</param>/// <returns></returns>public async Task<int> InsertAsync(T item){return await _connectionAsync.InsertAsync(item);}/// <summary>/// 数据删除/// </summary>/// <param name="id">要删除的数据的主键ID</param>/// <returns></returns>public async Task<int> DeleteAsync(int id){return await _connectionAsync.DeleteAsync<T>(id);}/// <summary>/// 数据更新/// </summary>/// <param name="item">要更新的数据项</param>/// <returns></returns>public async Task<int> UpdateAsync(T item){return await _connectionAsync.UpdateAsync(item);}/// <summary>/// 根据条件查询记录/// </summary>/// <param name="predExpr">查询条件</param>/// <returns></returns>public async Task<List<T>> QueryAsync(Expression<Func<T, bool>> predExpr){return await _connectionAsync.Table<T>().Where(predExpr).ToListAsync();}/// <summary>/// 查询所有数据/// </summary>/// <returns></returns>public async Task<List<T>> QueryAllAsync(){return await _connectionAsync.Table<T>().ToListAsync();}/// <summary>/// 根据条件查询单条记录/// </summary>/// <param name="predExpr">查询条件</param>/// <returns></returns>public async Task<T> QuerySingleAsync(Expression<Func<T, bool>> predExpr){return await _connectionAsync.Table<T>().Where(predExpr).FirstOrDefaultAsync();}}

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。
  • 在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群👪

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/188588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言每日一题(43)旋转链表

力扣 61 旋转链表 题目描述 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3]示例 2&#xff1a; 输入&#xff1a;head [0,1,2], …

酒店 KPI绩效考核指标及应用

“路遥知马力&#xff0c;日久见人心”&#xff0c;目前国内各类型酒店风起云涌&#xff0c;大有在市场竞争中一比高下之势&#xff0c;各路精英受经济型酒店低投入高回报的市场利益驱动&#xff0c;都分分抢占市场&#xff0c;从而使国内经济型酒店的数量不断增加&#xff0c;…

⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)

1.这里我代码没啥问题~~~编辑器里也没毛病 void Start(){// 加载底图和上层图片string backgroundImagePath Application.streamingAssetsPath "/background.jpg";Texture2D backgroundTexture new Texture2D(2, 2);byte[] backgroundImageData System.IO.File.R…

永恒之蓝漏洞复现

网安2211-202221336029 目录 1.介绍&#xff1a; 2.操作&#xff1a; 1.实验环境&#xff1a; 2.渗透实现 3.实现后操作 3.总结&#xff1a; 1.介绍&#xff1a; 1.漏洞描述&#xff1a;Eternalblue通过TCP端口445和139来利用SMBv1和NBT中的远程代码执行漏洞&#xff0…

【无标题】mmocr在云服务器上

这里写目录标题 1、创建虚拟环境2、切换和退出conda虚拟环境3. 显示、复制&#xff08;克隆&#xff09;、删除虚拟环境4、删除环境安装指示中 cd进项目文件夹开始训练模型&#xff08;python XXX.py | tee record.txt 记录训练结果&#xff09;如何在Linux服务器上安装Anacond…

数据结构--->单链表

文章目录 链表链表的分类 单链表单链表的存储结构单链表主要实现的接口函数单链表尾插动态申请新节点单链表头插单链表的尾删单链表的头删在指定位置之前插入单链表查找插入 在指定位置之后插删除指定位置元素删除指定位置之后的元素顺序输出链表销毁单链表 顺序表和单链表的区…

苍穹外卖--客户催单

需求分析 用户在小程序中点击催单按钮后&#xff0c;需要第一时间通知外卖商家 设计思路&#xff1a;* 通过WebSocket实现管理端页面和服务端保持长连接状态当用户点击催单按钮后&#xff0c;调用WebSocket的相关API实现服务端向客户端推送消息客户端浏览器解析服务端推送的…

【超全】JavaScript知识速查:JavaScript ES6标准语法

JavaScript知识速查 文章目录 JavaScript知识速查[toc]JavaScript ES6标准语法1. 变量和常量以及块级区域变量 (let):常量 (const): 2. 模板字符串3. 解构赋值数组解构:对象解构: 4. 数组和对象的扩展扩展运算符 (...):Array.from:Object.assign: 5. 类和对象定义类:继承: 6.箭…

Redis主从与哨兵架构详解

目录 主从架构 主从环境搭建 主从复制流程 1. 全量复制 2. 部分复制 主从风暴 哨兵架构 概念 哨兵环境搭建 主从架构 主从环境搭建 1. 复制一份redis.conf文件, 修改下面几行配置 port 6380 pidfile /var/run/redis_6380.pid logfile "6380.log" dir /usr/…

基于A*的网格地图最短路径问题求解

基于A*的网格地图最短路径问题求解 一、A*算法介绍、原理及步骤二、Dijkstra算法和A*的区别三、A*算法应用场景四、启发函数五、距离六、基于A*的网格地图最短路径问题求解实例分析完整代码 七、A*算法的改进思路 一、A*算法介绍、原理及步骤 A*搜索算法&#xff08;A star al…

PCB走线宽度与电流的关系表

在1 oz./sq. ft.铜重量时将温度上升限制在10C。这应该可以让您大致了解如何调整PCB中的走线尺寸。 电流&#xff08;A&#xff09;走线宽度&#xff08;mil&#xff09;1102303504805110615071808220926010300 上表适用于许多通常采用标准工艺生产的PCB&#xff0c;其目标是非…

Python按要求从多个txt文本中提取指定数据

基本想法 遍历文件夹并从中找到文件名称符合我们需求的多个.txt格式文本文件&#xff0c;并从每一个文本文件中&#xff0c;找到我们需要的指定数据&#xff0c;最后得到所有文本文件中我们需要的数据的集合 举例 如现有名为file一个文件夹&#xff0c;里面含有大量的.txt格…

C++概念相关练习题

目录 一、内存管理 二、运算符重载 三、this指针 四、构造&析构函数 一、内存管理 下面有关c内存分配堆栈说法错误的是( ) A.对于栈来讲&#xff0c;是由编译器自动管理&#xff0c;无需我们手工控制&#xff1b;对于堆来说&#xff0c;释放工作由程序员控制 B. 对…

【数据库】数据库并发控制的目标,可串行化序列的分析,并发控制调度器模型

数据库并发控制 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期更…

【稳定检索|投稿优惠】2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024)

2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024) 2024 International Conference on Biological Neuroengineering and Health Big Data(ICBNHBD) 一、【会议简介】 2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024)&#xff0c;这场科学盛宴&#xff0c;会议在中…

LeetCode刷题---汉诺塔问题

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 前言&#xff1a;这个专栏主要讲述递归递归、搜索与回溯算法&#xff0c;所以下面题目主要也是这些算法做的 我讲述题目会把讲解部分分为3个部分&#xff1a; 1、题目解析 2、算法原理思路讲解 …

webGL开发虚拟展览方案

开发 WebGL 虚拟展览涉及到选择适当的工具、技术和框架&#xff0c;以及设计一个令人愉悦且互动性强的用户体验。以下是一个可能的开发方案&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.选择 Web…

【C语言】与文件有关的操作

目录 1. 前言2. 什么是文件&#xff1f;2.1 程序文件2.2 数据文件2.3 文件名 3. 二进制文件和文本文件&#xff1f;4. 文件的打开和关闭4.1 流和标准流4.1.1 流4.1.2 标准流 4.2 文件指针4.3 文件的打开和关闭 5. 文件的顺序读写5.1 顺序读写函数介绍5.2 对比一组函数 6. 文件的…

对 Vision Transformers 及其基于 CNN-Transformer 的变体的综述

A survey of the Vision Transformers and its CNN-Transformer based Variants 摘要1、介绍2、vit的基本概念2.1 patch嵌入2.2 位置嵌入2.2.1 绝对位置嵌入(APE)2.2.2 相对位置嵌入(RPE)2.2.3卷积位置嵌入(CPE) 2.3 注意力机制2.3.1多头自我注意(MSA) 2.4 Transformer层2.4.1 …

记录一个奇怪的文件上传问题

项目是在企业微信内打开的webview&#xff0c;bug出现在一个更新数据的接口&#xff0c;参数为FormData对象&#xff0c;包含图片文件 ios&#xff1a;没问题&#xff0c;一切正常 安卓&#xff1a; 企业微信内打开&#xff0c;当FormData对象中包含一张图片文件&#xff0c…