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


    前言

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

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

    EasySQLite项目源码地址

    • GitHub地址:https://github.com/YSGStudyHards/EasySQLite[1]

    SQLite-net介绍

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

    • GitHub开源地址:https://github.com/praeclarum/sqlite-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

    1.     /// <summary>
    2.     /// SQLite同步方法帮助类
    3.     /// 作者:追逐时光者
    4.     /// 创建时间:20231130
    5.     /// </summary>
    6.     /// <typeparam name="T"></typeparam>
    7.     public class SQLiteHelper<T> where T : new()
    8.     {
    9.         private readonly string _databasePath = Path.Combine(Environment.CurrentDirectory, "ClassManagement.db");
    10.         private readonly SQLiteConnection _connection; // SQLite连接对象
    11.         /// <summary>
    12.         /// 构造函数
    13.         /// </summary>
    14.         public SQLiteHelper()
    15.         {
    16.             // 创建SQLite连接对象并打开连接
    17.             _connection = new SQLiteConnection(_databasePath);
    18.             _connection.CreateTable<T>(); // 如果表不存在,则创建该表[不会创建重复的表]
    19.         }
    20.         /// <summary>
    21.         /// 数据插入
    22.         /// </summary>
    23.         /// <param name="item">要插入的数据项</param>
    24.         /// <returns></returns>
    25.         public int Insert(T item)
    26.         {
    27.             return _connection.Insert(item);
    28.         }
    29.         /// <summary>
    30.         /// 数据删除
    31.         /// </summary>
    32.         /// <param name="id">要删除的数据的主键ID</param>
    33.         /// <returns></returns>
    34.         public int Delete(int id)
    35.         {
    36.             return _connection.Delete<T>(id);
    37.         }
    38.         /// <summary>
    39.         /// 数据更新
    40.         /// </summary>
    41.         /// <param name="item">要更新的数据项</param>
    42.         /// <returns></returns>
    43.         public int Update(T item)
    44.         {
    45.             return _connection.Update(item);
    46.         }
    47.         /// <summary>
    48.         /// 根据条件查询记录
    49.         /// </summary>
    50.         /// <param name="predExpr">查询条件</param>
    51.         /// <returns></returns>
    52.         public List<T> Query(Expression<Func<T, bool>> predExpr)
    53.         {
    54.             return _connection.Table<T>().Where(predExpr).ToList();
    55.         }
    56.         /// <summary>
    57.         /// 查询所有数据
    58.         /// </summary>
    59.         /// <returns></returns>
    60.         public List<T> QueryAll()
    61.         {
    62.             return _connection.Table<T>().ToList();
    63.         }
    64.         /// <summary>
    65.         /// 根据条件查询单条记录
    66.         /// </summary>
    67.         /// <param name="predExpr">查询条件</param>
    68.         /// <returns></returns>
    69.         public T QuerySingle(Expression<Func<T, bool>> predExpr)
    70.         {
    71.             return _connection.Table<T>().Where(predExpr).FirstOrDefault();
    72.         }
    73.     }

    SQLiteAsyncHelper

    1.     /// <summary>
    2.     /// SQLite异步方法帮助类
    3.     /// 作者:追逐时光者
    4.     /// 创建时间:20231130
    5.     /// </summary>
    6.     /// <typeparam name="T"></typeparam>
    7.     public class SQLiteAsyncHelper<T> where T : new()
    8.     {
    9.         private readonly string _databasePath = Path.Combine(Environment.CurrentDirectory, "ClassManagement.db");
    10.         private readonly SQLiteAsyncConnection _connectionAsync; // SQLite连接对象
    11.         /// <summary>
    12.         /// 构造函数
    13.         /// </summary>
    14.         public SQLiteAsyncHelper()
    15.         {
    16.             // 创建SQLite连接对象并打开连接
    17.             _connectionAsync = new SQLiteAsyncConnection(_databasePath);
    18.             _connectionAsync.CreateTableAsync<T>(); // 如果表不存在,则创建该表[不会创建重复的表]
    19.         }
    20.         /// <summary>
    21.         /// 数据插入
    22.         /// </summary>
    23.         /// <param name="item">要插入的数据项</param>
    24.         /// <returns></returns>
    25.         public async Task<int> InsertAsync(T item)
    26.         {
    27.             return await _connectionAsync.InsertAsync(item);
    28.         }
    29.         /// <summary>
    30.         /// 数据删除
    31.         /// </summary>
    32.         /// <param name="id">要删除的数据的主键ID</param>
    33.         /// <returns></returns>
    34.         public async Task<int> DeleteAsync(int id)
    35.         {
    36.             return await _connectionAsync.DeleteAsync<T>(id);
    37.         }
    38.         /// <summary>
    39.         /// 数据更新
    40.         /// </summary>
    41.         /// <param name="item">要更新的数据项</param>
    42.         /// <returns></returns>
    43.         public async Task<int> UpdateAsync(T item)
    44.         {
    45.             return await _connectionAsync.UpdateAsync(item);
    46.         }
    47.         /// <summary>
    48.         /// 根据条件查询记录
    49.         /// </summary>
    50.         /// <param name="predExpr">查询条件</param>
    51.         /// <returns></returns>
    52.         public async Task<List<T>> QueryAsync(Expression> predExpr)
    53.         {
    54.             return await _connectionAsync.Table<T>().Where(predExpr).ToListAsync();
    55.         }
    56.         /// <summary>
    57.         /// 查询所有数据
    58.         /// </summary>
    59.         /// <returns></returns>
    60.         public async Task<List<T>> QueryAllAsync()
    61.         {
    62.             return await _connectionAsync.Table<T>().ToListAsync();
    63.         }
    64.         /// <summary>
    65.         /// 根据条件查询单条记录
    66.         /// </summary>
    67.         /// <param name="predExpr">查询条件</param>
    68.         /// <returns></returns>
    69.         public async Task<T> QuerySingleAsync(Expression<Func<T, bool>> predExpr)
    70.         {
    71.             return await _connectionAsync.Table<T>().Where(predExpr).FirstOrDefaultAsync();
    72.         }
    73.     }

    参考资料

    [1]

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

  • 相关阅读:
    Ping工作原理
    包管理器-npm、yarn、cnpm、pnpm的比较
    linux平台源码编译ffmpeg
    Java计算机毕业设计视频网站的设计与实现源码+系统+数据库+lw文档
    “Docker操作案例实践“
    Web前端开发技术课程大作业——HTML5旅游景区景点(13页面)HTML+CSS+JavaScript
    4基于pytorch的蚁群算法求解TSP(旅行商问题),访问一座城市并回到最初位置的最佳路径,解决组合中的NP问题。程序已调通,替换自己的数据可以直接运行。
    动手学习TCP中
    Leetcode刷题笔记--Hot71--80
    C#批量视频处理工具
  • 原文地址:https://blog.csdn.net/qq_37237487/article/details/140281289