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,自动释放数据库连接资源

完结

相关推荐
ly76891 小时前
磁盘 I/O 延迟突增:用 iostat、blktrace 与火焰图定位到具体调用栈
java·linux·前端·数据库·iostat·磁盘 i/o·blktrace
倔强的石头_1 小时前
数据迁移工具KDMS如何生成量化评估报告
数据库
冰暮流星1 小时前
mysql多表练习2
数据库·sql·mysql
天天喝旺仔1 小时前
Git 内部原理深度解析:从 blob/tree/commit 对象到 packfile 与垃圾回收
数据结构·数据库·git·算法·哈希
风123456789~1 小时前
【Oracle专栏】明明有索引,但报ORA-08102未找到索引
oracle
风哥2号3 小时前
数据库教程FGMT52‑PostgreSQL用户权限与安全管理
数据库·postgresql
风哥2号10 小时前
数据库教程FGMT27‑MySQL数据库基础知识与体系架构
数据库·mysql
YangYang9YangYan11 小时前
2026 校招商品分析岗位 JD 拆解,核心指标、工具与面试考点
大数据·数据库·数据分析
Flynt11 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来
java·jvm·后端
西安栈上月明软件科技11 小时前
从业务黑话到本体图谱:OAG本体建模五步法(西安老系统AI化改造实战)
数据库·人工智能·架构