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

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

时间:2023-12-01 20:56:36浏览次数:38  
标签:SQLite return NET sqlite SQLiteHelper ORM net public

前言

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

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

EasySQLite项目源码地址

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

SQLite-net介绍

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

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

标签:SQLite,return,NET,sqlite,SQLiteHelper,ORM,net,public
From: https://www.cnblogs.com/Can-daydayup/p/17870851.html

相关文章

  • 0基础下载并安装SQLite并新建数据库
    //本文章由chatgpt-3.5协助生成。//步骤1:下载并安装SQLite(此部分有参考)访问SQLite官方DownloadPage:https://www.sqlite.org/download.html选择适用的文件:PrecompiledBinariesfor<你的操作系统>例如Windows就在PrecompiledBinariesforWindows中下载sql......
  • ETL (Extra-Transform-Load)
    背景介绍随着企业的发展,目前的业务线越来越复杂,各个业务系统独立运营。例如:CRM系统只会生产CRM的数据;Billing只会生产Billing的数据。各业务系统之间只关心自己的数据,导致各业务系统之间数据相互独立,互不相通。一旦业务系统之间进行数据交互,只能通过传统的webservice接口之间进......
  • Transformer
    Attention什么是注意力机制?对于人类来说,注意力机制是在注意力有限的情况下,只关注接受信息的一部分,而忽略其他部分。对于Transformer来说,以NLP为例,注意力机制就是对于当前token来说,为其所在序列中对任务而言更重要的元素赋予更高权重(注意力)。感知机可以认为是对不同选项赋......
  • GORM学习
    Day1:GORM入门1.环境的安装在项目文件的terminal中输入下面两条命令进行gorm安装gogetgorm.io/driver/mysqlgogetgorm.io/gorm2.安装好之后使用以下代码进行检测,其中的地址拼接是重点"%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s",us......
  • 在winform中绘图
    今天跟大家分享一下最近做的一个程序中绘图功能的实现。先来看看实现的效果:具体实现页面的设计绘图设置页面的设计如下所示:4个label控件,控件如下所示:2个DateEdit控件,控件如下所示:1个ComboBoxEdit控件,控件如下所示:1个CheckedListBoxControl控件,控件如下所示:1个Simpl......
  • 简化版Transformer来了,网友:年度论文
    前言 从大模型的根源开始优化。本文转载自机器之心仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全教程整理【CV技术指南】CV全栈指导班、基础入门班、论文......
  • ENTROFORMER: A TRANSFORMER-BASED ENTROPY MODEL基于transformer的熵模型
    目录简介模型核心代码性能实验简介\(\quad\)由于cnn在捕获全局依赖关系方面效率低,因此该文章提出了基于tansformer的熵模型——Entoformer;并针对图像压缩进行了top-kself-attention和adiamondrelativepositionencoding的优化;同时使用双向上下文模型加快解码。模型核心代......
  • 简化版Transformer :Simplifying Transformer Block论文详解
    在这篇文章中我将深入探讨来自苏黎世联邦理工学院计算机科学系的BobbyHe和ThomasHofmann在他们的论文“SimplifyingTransformerBlocks”中介绍的Transformer技术的进化步骤。这是自Transformer开始以来,我看到的最好的改进。大型语言模型(llm)可以通过各种扩展策略扩展其功......
  • transformer中decoder到底是串行还是并行
    在Transformer中,Decoder部分内部的不同层通常可以并行工作,这意味着每个Decoder层可以同时处理整个序列。比如,在处理Self-Attention时,模型可以同时计算所有位置的注意力权重。但在生成输出序列时,尽管Decoder内部的不同层可以并行工作,模型仍然需要按顺序逐步生成每个词。这是因为Tr......
  • freesql orm 使用 DynamicFilterInfo 拼接日期查询条件时间格式一个难得的经验
    文本到时间条件的转换前端输入1253-3,后台提示"varchar数据类型到datetime数据类型的转换产生一个超出范围的值"经查询,mssql【datetime】数据类型:最大是9999年12月31日,最小是1753年1月1日所以要拼接限制一下,只是if(val.ToDate()<DateTime.MinValue||val.ToDa......