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

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

前言

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

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

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();
        }
    }

参考资料

[1]

https://github.com/YSGStudyHards/EasySQLite:https://github.com/YSGStudyHards/EasySQLite

相关文章
|
4月前
|
SQL 开发框架 数据库
".NET开发者的超能力:AgileEAS.NET ORM带你穿越数据库的迷宫,让数据操作变得轻松又神奇!"
【8月更文挑战第16天】AgileEAS.NET是面向.NET平台的企业应用开发框架,核心功能包括数据关系映射(ORM),允许以面向对象方式操作数据库,无需编写复杂SQL。通过继承`AgileEAS.Data.Entity`创建实体类对应数据库表,利用ORM简化数据访问层编码。支持基本的CRUD操作及复杂查询如条件筛选、排序和分页,并可通过导航属性实现多表关联。此外,提供了事务管理功能确保数据一致性。AgileEAS.NET的ORM简化了数据库操作,提升了开发效率和代码可维护性。
55 5
|
4月前
|
SQL 缓存 开发框架
分享一个 .NET EF6 应用二级缓存提高性能的方法
分享一个 .NET EF6 应用二级缓存提高性能的方法
|
2月前
|
SQL 开发框架 关系型数据库
值得推荐的.NET ORM框架
值得推荐的.NET ORM框架
|
3月前
|
SQL 关系型数据库 数据库
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)
|
4月前
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
|
4月前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
|
3月前
|
SQL 数据库 C语言
sqlite3使用入门
本文介绍了SQLite3数据库的安装与使用方法。首先通过`sudo apt install sqlite3`进行安装,并用`sqlite3 --version`验证版本。启动SQLite3后,使用`.help`查看系统维护命令,如`.database`列出数据库、`.tables`列出表等。通过标准SQL语句创建、查询、更新和删除表及数据。示例代码展示了如何使用C语言进行数据库操作,包括打开、创建表、插入数据、查询、更新和删除等基本功能。此外,还介绍了SQLite3的事务处理机制及其重要特性。
|
4月前
|
缓存 数据库连接 API
Entity Framework Core——.NET 领域的 ORM 利器,深度剖析其最佳实践之路
【8月更文挑战第28天】在软件开发领域,高效的数据访问与管理至关重要。Entity Framework Core(EF Core)作为一款强大的对象关系映射(ORM)工具,在 .NET 开发中扮演着重要角色。本文通过在线书店应用案例,展示了 EF Core 的核心特性和优势。我们定义了 `Book` 实体类及其属性,并通过 `BookStoreContext` 数据库上下文配置了数据库连接。EF Core 提供了简洁的 API,支持数据的查询、插入、更新和删除操作。
127 0
|
4月前
|
程序员 数据库
分享 2 个 .NET EF 6 只更新某些字段的方法
分享 2 个 .NET EF 6 只更新某些字段的方法
113 0