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();
七、使用要点说明
-
CodeFirst 标准流程:定义实体 → 编写 DbContext → Add-Migration → Update-Database
-
SQLite 是文件型数据库,无需额外安装数据库服务
-
新增 / 修改 / 删除后必须执行
SaveChanges()数据才落地入库 -
实体字段改动后,重新执行两条迁移命令自动同步表结构
-
using 包裹 DbContext,自动释放数据库连接资源
完结
