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

前言

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

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

EasySQLite项目源码地址

GitHub地址:https://github.com/YSGStudyHards/EasySQLite

SQLite-net介绍

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

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

Package Description Package 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技术社区微信交流群👪

相关推荐
追逐时光者5 天前
C#/.NET/.NET Core开发实战教程集
【.net】·【c#】·【.net core】
追逐时光者6 天前
C#/.NET/.NET Core技术前沿周刊 | 第 7 期(2024年9.23-9.30)
【.net】·【c#】·【开源项目】·【实用工具】·【.net core】·【技术前沿周刊】
追逐时光者8 天前
2款.NET开源且免费的Git可视化管理工具
【.net】·【开源项目】·【实用工具】·【git】
追逐时光者10 天前
WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者12 天前
CodeMaid:一款基于.NET开发的Visual Studio代码简化和整理实用插件
【visual studio】·【.net】·【开源项目】·【实用工具】
追逐时光者13 天前
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
【.net】·【c#】·【开源项目】·【.net core】·【技术前沿周刊】
追逐时光者14 天前
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者16 天前
.NET常见的几种项目架构模式,你知道几种?(附带使用情况投票)
【.net】·【c#】·【.net core】·【面试指南】
追逐时光者17 天前
分享3款开源、免费的Avalonia UI控件库
【.net】·【开源项目】·【avalonia】
追逐时光者20 天前
C#/.NET/.NET Core技术前沿周刊 | 第 5 期(2024年9.9-9.15)
【.net】·【c#】·【开源项目】·【.net core】·【技术前沿周刊】