C# FreeSql使用,基于Sqlite的DB Frist和Code First测试

news2024/12/23 0:44:09

文章目录

  • 前言
  • FreeSql 简单连接
    • 数据库服务不存在
    • 没装FreeSql.All
    • 装了FreeSql.All
    • 安装包选择
  • DBFirst
    • 安装命令行生成器
    • 生成Bat创建脚本
  • 基于Sqlite的Code Frist
    • 文件夹自动导出到Debug目录
    • Sqlite 数据库安装和创建
    • Sqlite连接
    • 数据库自动增列增表测试
      • 增列
      • 删列
      • 改列名
      • 同名列改属性
    • CodeFrist的意义
  • 总结

前言

Freesql是一个C# 的ORM框架,C# 另一个框架是Sqlsugar。两个从Nuget下载量和Github的星星上面,其实都差不多。两个作者之间有点矛盾,但是我是一个局外人,啥都不懂,技术哪个好用用哪个,我平时做的也就是CRUD这种工作。

FreeSql相关链接

Freesql官方文档

SqlSugar我之前也用过

.NET SqlSuger 简单介绍,超快开发数据库

FreeSql 简单连接

Nuget安装一下

在这里插入图片描述

            //新建实例对象
            var MyFreeSql = new FreeSql.FreeSqlBuilder()
                .UseConnectionString(FreeSql.DataType.SqlServer, "你的数据库连接串")
                .Build();

            //测试网络连接
            MyFreeSql.Ado.ExecuteConnectTest();

数据库服务不存在

在这里插入图片描述

原因是缺乏对应的数据库连接包

Freesql 指南安装

在这里插入图片描述

对导出文件大小无所谓就直接用FreeSql.All即可
在这里插入图片描述

没装FreeSql.All

在这里插入图片描述

装了FreeSql.All

在这里插入图片描述

安装包选择

35MB其实还能接受,比较我们是快速开发,代码能跑就行。

DBFirst

FreeSql DbFirst

DBFirst导出有两种方式:

  • 直接在Debug文件导出,然后自己复制粘贴
  • 使用命令行直接生成

Sqlsugar是直接在Debug文件导出的,FreeSql是使用命令行去生成的。

安装命令行生成器

尝试全局安装,安装的时候会卡个一分钟,然后跳出成功界面

dotnet tool install -g FreeSql.Generator

在这里插入图片描述
输入指令,查看是否安装成功

FreeSql.Generator --help

在这里插入图片描述

生成Bat创建脚本

根据官方建议,在实体类根目录下面生成对应的bat文件

在这里插入图片描述

填写对应的参数

在这里插入图片描述

创建如下的Bat执行脚本文件
在这里插入图片描述

FreeSql.Generator -Razor 1 -NameOptions 0,0,0,1 -NameSpace LinCms.Core.Entities -DB "MySql,Data Source=127.0.0.1;Port=3306;User ID=root;Password=123456;Initial Catalog=lincms;Charset=utf8;SslMode=none;Max pool size=2"

运行成功
在这里插入图片描述
在这里插入图片描述
会生成一个重新生成的bat文件

基于Sqlite的Code Frist

在这里插入图片描述

文件夹自动导出到Debug目录

为了方便资源文件夹的保存,我这里定义一个全局的资源文件夹

Visual Studio C# 项目生成时复制项目资源目录到生成目录

在这里插入图片描述

在这里插入图片描述

 <ItemGroup>
    <!-- 这里可以改成任意的文件的,我这里设置我自己的资源文件夹全部文件包括根目录输出到Debug路径 -->
    <None Include="Resources\**">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>

在这里插入图片描述
生成成功
在这里插入图片描述

Sqlite 数据库安装和创建

FreeSql不会主动创建数据库,需要我们自己先手动创建

在这里插入图片描述

SQLite 在Windows环境下使用命令行shell创建SQLite数据库

命令行输入指令,确认Sqlite安装成功

sqlite3

在这里插入图片描述
生成Sqlite数据库文件

sqlite3
.open mydatabase.db

在这里插入图片描述
在这里插入图片描述

当然如果你有别的软件,比如Navicat Premium,也可以使用软件直接创建
在这里插入图片描述

Sqlite连接

FreeSql的Sqlite的连接串大概长这样

  • DataType.Sqlite
  • Data Source=|DataDirectory|\document.db; Attachs=xxxtb.db; Pooling=true;Min Pool Size=1

FreeSql CodeFirst 官方文档

测试一下数据库连接状态

  internal class Program
  {
      static void Main(string[] args)
      {
          //新建实例对象
          var MyFreeSql = new FreeSql.FreeSqlBuilder()
              .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=Resources\mydatabase.db; Attachs=test.db; Pooling=true;Min Pool Size=1")
              .Build();
          //测试网络连接
          var isConnect =   MyFreeSql.Ado.ExecuteConnectTest();
          Console.WriteLine($"数据库连接状态{isConnect}");

          Console.WriteLine("Hello, World!");
          Console.ReadKey();
      }
  }

在这里插入图片描述

数据库自动增列增表测试

默认有个main数据库

在这里插入图片描述

测试代码

static void Main(string[] args)
{
    //新建实例对象
    var MyFreeSql = new FreeSql.FreeSqlBuilder()
        //连接test数据库
        .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=Resources\mydatabase.db; Attachs=test.db; Pooling=true;Min Pool Size=1")
        .UseAutoSyncStructure(true) //自动同步实体结构【开发环境必备】,FreeSql不会扫描程序集,只有CRUD时才会生成表。
        .UseMonitorCommand(cmd => Console.Write(cmd.CommandText))
        .Build();


    //MyFreeSql
    //测试网络连接
    var isConnect = MyFreeSql.Ado.ExecuteConnectTest();
    Console.WriteLine($"数据库连接状态{isConnect}");

    var students = MyFreeSql.Queryable<Student>().Take(100).OrderByDescending(t => t.Id).ToList();

    var teachers = MyFreeSql.Queryable<Teacher>().Take(100).OrderByDescending(t => t.Id).ToList();
    Console.WriteLine("Hello, World!");

    Console.ReadKey();
}

测试实体类

    /// <summary>
    /// 学生类
    /// </summary>
    public class Student
    {

        [Column(IsIdentity = true, IsPrimary = true)]
        public int Id { get; set; }
        public DateTime CreateTime { get; set; }
        public string Name { get; set; }

        public int StudentNo { get; set; }
    }
    /// <summary>
    /// 教师类
    /// </summary>
    public class Teacher
    {
        [Column(IsIdentity = true, IsPrimary = true)]
        public int  Id { get; set; }

        public int TeacherNo {  get; set; }

        public DateTime CreateTime { get; set; }
        public string Name { get; set; }
    }

打印语句
在这里插入图片描述
自动生成表结构

在这里插入图片描述
在这里插入图片描述

为什么库名还是main?

根据我的理解,Sqlite3是一个数据库文件当做一个数据库的。所以库名不会改变

Sqlite数据库容量的上限是128TB,一般来说够用了。我公司用的SqlServer数据库,运行了5年也就900GB,1GB不到的数据+一堆事物(增删改查的记录)

在这里插入图片描述

增列

 /// <summary>
 /// 学生类
 /// </summary>
 public class Student
 {

     [Column(IsIdentity = true, IsPrimary = true)]
     public int Id { get; set; }
     public DateTime CreateTime { get; set; }
     public string Name { get; set; }

     public int StudentNo { get; set; }


     /// <summary>
     /// 增列测试
     /// </summary>
     public int StudentId { get; set;}
 }

在这里插入图片描述
在这里插入图片描述

删列

    /// <summary>
    /// 学生类
    /// </summary>
    public class Student
    {

        [Column(IsIdentity = true, IsPrimary = true)]
        public int Id { get; set; }
        public DateTime CreateTime { get; set; }
        public string Name { get; set; }

        //删掉该列
        //public int StudentNo { get; set; }


        /// <summary>
        /// 增列测试
        /// </summary>
        public int StudentId { get; set;}
    }

在这里插入图片描述

在这里插入图片描述

改列名

 /// <summary>
 /// 学生类
 /// </summary>
 public class Student
 {

     [Column(IsIdentity = true, IsPrimary = true)]
     public int Id { get; set; }
     public DateTime CreateTime { get; set; }
     public string Name { get; set; }

     /// <summary>
     /// 改列名从StudentNo改成StudentNoNew
     /// </summary>
     public int StudentNoNew { get; set; }


     /// <summary>
     /// 增列测试
     /// </summary>
     public int StudentId { get; set;}
 }

在这里插入图片描述
在这里插入图片描述
经过多次测试,确实会同步改列名,这个我不知道是怎么做到的,估计是根据反射属性的顺序进行判断

同名列改属性

public class Student
{

    [Column(IsIdentity = true, IsPrimary = true)]
    public int Id { get; set; }
    public DateTime CreateTime { get; set; }
    public string Name { get; set; }

    /// <summary>
    /// 改列属性
    /// </summary>
    public string StudentNoNew { get; set; }


    /// <summary>
    /// 增列测试
    /// </summary>
    public int LALAL { get; set; }
}

在这里插入图片描述

在这里插入图片描述

CodeFrist的意义

使用了CodeFrist,第一就是敏捷开发,程序员不需要知道数据库新增表,新增列是如何操作的,只需要关注业务代码。而且就可以使用基础和泛型了

    /// <summary>
    /// 声明抽象基类
    /// </summary>
    public abstract class SqliteBase
    {

        [Column(IsIdentity = true, IsPrimary = true)]
        public int Id { get; set; }
        public DateTime CreateTime { get; set; }
    }
    /// <summary>
    /// 学生类
    /// </summary>
    public class Student:SqliteBase
    {


        public string Name { get; set; }

        /// <summary>
        /// 改列属性
        /// </summary>
        public string StudentNoNew { get; set; }


        /// <summary>
        /// 增列测试
        /// </summary>
        public int LALAL { get; set; }
    }

    /// <summary>
    /// 教师类
    /// </summary>
    public class Teacher:SqliteBase
    {
        public int TeacherNo {  get; set; }

        public DateTime CreateTime { get; set; }
        public string Name { get; set; }
    }

而且可以使用泛型方法,泛型约束,扩展方法。这里就不展开说明了。简单来说就是可以更加规范的使用。至少在使用Sqlite数据库的时候可就可以使用Code Frist敏捷开发,毕竟就是用来做本地缓存数据库的,数据表变来变去无所谓,能存数据就行。

总结

FreeSql 用起来还是很不错的,毕竟主打的就是ORM懒人开发,把底层的逻辑交给程序,自己把重点关心在业务逻辑上面。

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

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

相关文章

【小黑嵌入式系统第十四课】μC/OS-III程序设计基础(三)——信号量(任务同步资源同步)、事件标记组(与或多个任务)

上一课&#xff1a; 【小黑嵌入式系统第十三课】PSoC 5LP第二个实验——中断控制实验 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff1a;人工智能 文章目录 1 信号量1.1 简介1.2…

Generalized Focal Loss论文个人理解

论文地址&#xff1a;Generalized Focal Loss: Towards Efficient Representation Learning for Dense Object Detection 论文解决问题 研究人员最近更加关注边界框的表示(representation)及其定位质量估计&#xff08;LQE&#xff0c;本论文中指的是IoU score&#xff09;&a…

加速你的数据库:公司中SQL优化的八大绝招

前言 SQL优化这个问题也是老生常谈了&#xff0c;很多都还是在八股文中了解到&#xff0c;那么公司里的SQL都是咋优化的呢&#xff1f;和八股文一样吗&#xff1f;下面&#xff0c;我将与大家分享我在公司里学到的SQL优化知识。SQL优化是提高数据库性能和减少资源消耗的重要一环…

金融行业案例分享 | 升级业务保障,HyperBDR助力巴西海通银行容灾上华为云

巴西海通银行通过HyperBDR成功将业务从本地VMware容灾上华为云&#xff0c;实现分钟级RTO&#xff0c;保障业务连续性同时优化容灾TCO。 项目背景 海通银行由海通证券股份有限公司控股&#xff0c;是一家受欧盟监管的银行&#xff0c;在葡萄牙里斯本注册成立&#xff0c;业务遍…

mysql定时备份shell脚本和还原

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言数据库备份分类mysqldump命令备份计划1.每日备份&#xff0c;保留30天备份文件2.每月1号备份&#xff0c;保留12个月备份文件 定时调度还原总结 前言 数据库备…

QT第1天

题目&#xff1a;点击按钮改变文字 需要增加一个count属性&#xff0c;并且只需要定义槽&#xff0c;信号函数已经内置好了 //widget.h#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Wi…

数据分析讲课笔记01:数据分析概述

文章目录 零、学习目标一、本次课程概述二、数据分析的背景&#xff08;一&#xff09;进入大数据时代&#xff08;二&#xff09;数据分析的作用 三、什么是数据分析&#xff08;一&#xff09;数据分析的概念&#xff08;二&#xff09;数据分析的分类1、描述性数据分析2、探…

抛弃安卓,追赶iOS,鸿蒙能否成为中国第二大系统?

据半导体行业观察机构Techinsights发布报告预测&#xff0c;从2024年起&#xff0c;鸿蒙Harmony OS将取代苹果iOS&#xff0c;成为中国市场上第二大智能手机操作系统。 鸿蒙系统&#xff0c;支棱起来了&#xff01;去年&#xff0c;华为前脚“复活”麒麟芯片&#xff0c;后脚宣…

天津大数据分析培训班 常见的大数据培训课程

大数据现在属于热门职业技能之一&#xff0c;不管是大学毕业生&#xff0c;计算机和数据相关专业青年&#xff0c;已经工作一阵的开发人员&#xff0c;运营小白&#xff0c;还是其他想进入这个行当的&#xff0c;可能还没有编程基础的转行人&#xff0c;都想尝试大数据行业&…

2024年人工智能有哪些证书可以报考呢?

由国家工信部权威认证的人工智能证书是跨入人工智能行业的敲门砖&#xff0c;随着人工智能技术的发展越来越成熟&#xff0c;相关的从业人员也会剧增&#xff0c;证书的考取难度也会变高。如果已经从事或者准备从事人工智能行业的人员&#xff0c;对于考证宜早不宜迟&#xff0…

C语言之扫雷小游戏的实现【含递归展开】

文章目录 前言一、扫雷游戏代码设计思路二、设计扫雷代码1.创建菜单函数2.实现9x9扫雷3.初始化棋盘4.打印棋盘5.随机布置雷的位置6.排查雷的信息7.递归展开 三、源码1.新建一个test.c源文件2.新建一个game.c源文件3.创建一个game.h头文件 前言 扫雷游戏是1992年发行的一款大众类…

银河麒麟v10安装前端环境(Node、vue、Electron+vite)

此帖子所提到的所有依赖包都是基于银河麒麟v10真机的arm架构包&#xff0c;如果是在windows上的虚拟机上 把依赖包换成x64的包即可&#xff0c;方法步骤都是一样 一.node安装 原始方法安装&#xff08;建议用第二种nvm方法&#xff0c;因为更简单&#xff09;&#xff1a; 1…

Salesforce生态系统2024年就业趋势

对于Salesforce专业人士来说&#xff0c;新一年的开始都是激动人心的。但2023年仍存在显著挑战&#xff0c;经济技术低迷导致裁员&#xff0c;以及Salesforce生态系统增长放缓等等&#xff0c;这些挑战将延续到2024年。 回顾2023年 2023年&#xff0c;Salesforce生态系统以及…

Navicat 技术干货 | 为 MySQL 表选择合适的存储引擎

MySQL 是最受欢迎的关系型数据库管理系统之一&#xff0c;提供了不同的存储引擎&#xff0c;每种存储引擎都旨在满足特定的需求和用例。在优化数据库和确保数据完整性方面&#xff0c;选择合适的存储引擎是至关重要的。今天&#xff0c;我们将探讨为 MySQL 表选择合适的存储引擎…

反向传播(Back Propagation)

目录 回归简单模型的梯度计算 反向传播计算图链式求导链式法则定理&#xff1a; Forward 前馈计算反向传播Back Propagation例子线性模型的计算图计算前馈过程反向传播过程&#xff08;逆向求导&#xff09; 练习 Pytorch中的前馈过程和反向传播过程Tensor 回归 简单模型的梯度…

C#基础:通过QQ邮件发送验证码到指定邮箱

一、控制台程序 using System; using System.Net; using System.Net.Mail;public class EmailSender {public void SendEmail(string toAddress, string subject, string body){// 设置发件人邮箱地址以及授权码string fromAddress "xxxxxqq.com";string password …

LORA的基本原理

本文将介绍如下内容&#xff1a; 什么是Lora高效微调的基本原理LORA的实现方式LORA为何有效&#xff1f; 一、什么是LoRA LoRA 通常是指低秩分解&#xff08;Low-Rank Decomposition&#xff09;算法&#xff0c;是一种低资源微调大模型方法&#xff0c;论文如下: LoRA: Low…

【漏洞复现】优卡特脸爱云一脸通智慧管理平台文件上传漏洞

Nx01 产品简介 脸爱云一脸通智慧管理平台是一套功能强大&#xff0c;运行稳定&#xff0c;操作简单方便&#xff0c;用户界面美观&#xff0c;轻松统计数据的一脸通系统。无需安装&#xff0c;只需在后台配置即可在浏览器登录。 功能包括&#xff1a;系统管理中心、人员信息管…

智慧校园实验室安全综合管理平台如何保障实验室安全?

一、建设思路 实验室安全综合管理平台是基于以实验室安全&#xff0c;用现代化管理思想与人工智能、大数据、互联网技术、物联网技术、云计算技术、人体感应技术、语音技术、生物识别技术、手机APP、自动化仪器分析技术有机结合&#xff0c;通过建立以实验室为中心的管理体系&…

局域网的好哥们——广域网

广域网&#xff08;Wide Area Network&#xff0c;WAN&#xff09;是一种覆盖范围广泛的网络&#xff0c;它连接了不同地理位置的计算机和网络设备&#xff0c;并允许它们进行数据通信和资源共享。本文将介绍广域网的基本概念&#xff0c;包括定义、特点、构成要素以及应用场景…