YXGK.FakeVM数据库示例

YXGK.FakeVM数据库示例

缘由

引子:从招聘需求到技术实践

最近,一份东莞的 C#/WPF 上位机软件工程师招聘引起了我的注意。职位要求熟练掌握 SQL Server/MySQL/SQLite 数据库操作,这恰恰印证了在工业自动化、机器视觉等领域,高效、可靠的数据库存取能力是上位机开发的核心技能之一。

那么,如何在实际项目中,特别是像 YXGK.FakeVM 这样的机器视觉开发环境中,优雅地操作 SQLite 数据库呢?本文将为你揭晓答案。我们将重点介绍如何结合 C# EF Core 的 Code First 模式,在 FakeVM 项目中实现从实体定义、数据库迁移到增删改查的全流程操作,让你能快速将数据存储、追溯功能集成到你的视觉应用中。

数据库操作的几个步骤

1-配置参数

2-打开数据库

3-CRUD

4-关闭数据库

FakeVM操作数据库示例

1-演示说明

最常用的模版匹配,加载图片->模版匹配->存储数据

2-存储数据-订阅数据

3-数据追溯和导出csv文件

知识点

C#_EF_SQLite_CodeFirst.md

bash 复制代码
# C# EF Core SQLite CodeFirst 操作手册

## 一、NuGet 依赖安装

### 包管理器控制台(PMC)

```powershell

Install-Package Microsoft.EntityFrameworkCore.Sqlite

Install-Package Microsoft.EntityFrameworkCore.Tools

.NET CLI

bash 复制代码
dotnet add package Microsoft.EntityFrameworkCore.Sqlite

dotnet add package Microsoft.EntityFrameworkCore.Tools

二、实体类代码

bash 复制代码
using System;

using System.Collections.Generic;

using System.ComponentModel.DataAnnotations;


/// <summary>学生实体</summary>

public class Student

{

    [Key]

    public int Id { get; 
set
; }


    [Required]

    [MaxLength(30)]

    public string Name { get; 
set
; }


    [Range(1, 120)]

    public int Age { get; 
set
; }


    public DateTime CreateTime { get; 
set
; }


    // 外键关联班级

    public int ClassId { get; 
set
; }

}


/// <summary>班级实体(一对多)</summary>

public class ClassInfo

{

    [Key]

    public int Id { get; 
set
; }


    [MaxLength(50)]

    public string ClassName { get; 
set
; }


    public List<Student> Students { get; 
set
; } = new List<Student>();

}

三、数据库上下文 DbContext

bash 复制代码
using Microsoft.EntityFrameworkCore;


public class AppDbContext : DbContext

{

    public DbSet<Student> Students { get; 
set
; }

    public DbSet<ClassInfo> ClassInfos { get; 
set
; }


    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)

    {

        // SQLite数据库文件:程序运行目录 AppDb.db

        optionsBuilder.UseSqlite(
"Data Source=AppDb.db"
);

    }


    // FluentAPI 配置表关系

    protected override void OnModelCreating(ModelBuilder modelBuilder)

    {

        modelBuilder.Entity<ClassInfo>()

            .HasMany(c => c.Students)

            .WithOne()

            .HasForeignKey(s => s.ClassId);

    }

}

四、CodeFirst 迁移命令(PMC 控制台)

bash 复制代码
# 1.生成迁移脚本

Add-Migration InitCreateTable

# 2.创建数据库&数据表

Update-Database

执行完毕后运行目录自动生成 AppDb.db 文件

五、CRUD 增删改查示例

bash 复制代码
using System;

using System.Linq;

using Microsoft.EntityFrameworkCore;


class Program

{

    static void 
Main
()

    {

        
#region 新增数据

        using (var db = new AppDbContext())

        {

            var cls = new ClassInfo { ClassName = 
"高一2班"
 };

            cls.Students.Add(new Student

            {

                Name = 
"李四"
,

                Age = 17,

                CreateTime = DateTime.Now,

                ClassId = 1

            });

            db.ClassInfos.Add(cls);

            db.SaveChanges();

        }

        
#endregion


        
#region 查询数据

        using (var db = new AppDbContext())

        {

            // 查询全部

            var allStu = db.Students.ToList();

            // 条件单条查询

            var stu = db.Students.FirstOrDefault(x => x.Name == 
"李四"
);

            // 联表查询 Include

            var classData = db.ClassInfos.Include(x => x.Students).ToList();

        }

        
#endregion


        
#region 修改数据

        using (var db = new AppDbContext())

        {

            var stu = db.Students.FirstOrDefault(x => x.Id == 1);

            
if
 (stu != null)

            {

                stu.Age = 18;

                db.SaveChanges();

            }

        }

        
#endregion


        
#region 删除数据

        using (var db = new AppDbContext())

        {

            var stu = db.Students.FirstOrDefault(x => x.Id == 1);

            
if
 (stu != null)

            {

                db.Students.Remove(stu);

                db.SaveChanges();

            }

        }

        
#endregion

    }

}

六、常用查询语法速查

bash 复制代码
// 查询全表

db.Students.ToList();

// 条件筛选

db.Students.Where(x=>x.Age>16).ToList();

// 查找单条

db.Students.FirstOrDefault(x=>x.Id==1);

// 倒序排序

db.Students.OrderByDescending(x=>x.Age).ToList();

// 分页

db.Students.Skip(10).Take(5).ToList();

// 预加载关联表

db.ClassInfos.Include(c=>c.Students).ToList();

七、使用要点说明

  1. CodeFirst 标准流程:定义实体 → 编写 DbContext → Add-Migration → Update-Database

  2. SQLite 是文件型数据库,无需额外安装数据库服务

  3. 新增 / 修改 / 删除后必须执行 SaveChanges() 数据才落地入库

  4. 实体字段改动后,重新执行两条迁移命令自动同步表结构

  5. using 包裹 DbContext,自动释放数据库连接资源

完结

相关推荐
牛奔1 小时前
如何让 GORM 打印 SQL 语句?三种方式全解析
数据库·sql
XWalnut1 小时前
Redis从入门到精通
数据库·redis·缓存
andafaAPS2 小时前
安达发|工艺品aps自动排产排程排单软件:告别生产“一团乱麻“
大数据·数据库·人工智能·安达发aps·计划排产软件·自动排单软件
zt1985q2 小时前
本地部署源代码管理解决方案 Bitbucket Data Center 并实现外部访问
运维·服务器·数据库·网络协议·postgresql·源代码管理
一只专注api接口开发的技术猿2 小时前
OpenClaw 对接淘宝商品 API,低成本实现全天候选品监控|附可运行 Python 实操代码
大数据·开发语言·数据库·python
爱喝水的鱼丶3 小时前
SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇)第三篇:SAP接口对接开发:实现数据的实时/批量校验交互
运维·数据库·学习·性能优化·sap·abap·经验交流
真香号3 小时前
记一次生产RocketMQ消息积压消费慢的排查与解决
数据库·rocketmq·java-rocketmq
数据库小学妹3 小时前
国产数据库技术成熟度实测:从Oracle兼容到高可用,四个维度评估能不能上生产
数据库·经验分享·oracle·性能优化·dba
JdSnE27zv4 小时前
数据库性能优化三:程序操作优化
数据库·sql·性能优化