H.Test.Sqlite-Sqlite 数据库
特性说明轻量级嵌入式数据库,无需独立服务器零配置开箱即用,无需安装单文件整个数据库存储在一个文件中跨平台支持 Windows、Linux、macOSACID 兼容支持事务处理创建 DataContext:继承 DbContext,定义实体集合配置连接:使用 SQLite 提供程序设计时工厂:支持 EF Core 命令行工具迁移管理:创建和应用数据库迁移数据操作:CRUD 操作示例通过本教程,你应该
·
H.Test.Sqlite 教程:从零开始学习 SQLite 数据库集成
一、项目概述
H.Test.Sqlite 是一个演示项目,用于展示如何在 WPF 应用中集成 SQLite 数据库。该项目使用 Entity Framework Core 进行数据访问,并演示了数据库迁移、上下文配置等核心功能。
项目结构
H.Test.Sqlite/
├── Migrations/ # EF Core 迁移文件
│ ├── 20231101115422_init.Designer.cs
│ ├── 20231101115422_init.cs
│ └── MyDataContextModelSnapshot.cs
├── App.xaml # 应用程序入口
├── App.xaml.cs
├── AssemblyInfo.cs
├── H.Test.Sqlite.csproj # 项目文件
├── MainWindow.xaml # 主窗口
├── MainWindow.xaml.cs
└── MyDataContext.cs # 数据库上下文
核心依赖
| 依赖项目 | 作用 |
|---|---|
H.DataBases.Sqlite |
SQLite 数据库支持 |
Microsoft.EntityFrameworkCore.Sqlite |
EF Core SQLite 提供程序 |
Microsoft.EntityFrameworkCore.Design |
设计时支持 |
Microsoft.EntityFrameworkCore.Proxies |
延迟加载代理 |
二、SQLite 简介
2.1 SQLite 特点
| 特性 | 说明 |
|---|---|
| 轻量级 | 嵌入式数据库,无需独立服务器 |
| 零配置 | 开箱即用,无需安装 |
| 单文件 | 整个数据库存储在一个文件中 |
| 跨平台 | 支持 Windows、Linux、macOS |
| ACID 兼容 | 支持事务处理 |
2.2 SQLite 适用场景
- 桌面应用本地数据存储
- 移动端应用数据存储
- 嵌入式设备数据库
- 开发测试环境
三、数据库上下文配置
3.1 创建 DataContext
using H.DataBases.Share;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
namespace H.Test.Sqlite
{
public class MyDataContext : DbContext
{
// 构造函数注入配置
public MyDataContext(DbContextOptions<MyDataContext> options) : base(options)
{
// Database.EnsureCreated(); // 自动创建数据库(不使用迁移时)
}
// 模型配置
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// 可以在这里配置实体关系、索引等
}
// 定义实体集合
public DbSet<mbc_dv_image> mbc_dv_images { get; set; }
}
}
3.2 设计时工厂
public class MyDataContextFactory : IDesignTimeDbContextFactory<MyDataContext>
{
public MyDataContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<MyDataContext>();
// 配置 SQLite 连接字符串
optionsBuilder.UseLazyLoadingProxies() // 启用延迟加载
.UseSqlite("Data Source=Migration.db"); // SQLite 数据库文件
return new MyDataContext(optionsBuilder.Options);
}
}
3.3 实体类示例
public class mbc_dv_image
{
public int Id { get; set; } // 主键
public string Name { get; set; } // 名称
public string Url { get; set; } // 地址
public DateTime CreateTime { get; set; } = DateTime.Now; // 创建时间
}
四、EF Core 迁移
4.1 创建迁移
打开 Package Manager Console(PMC),执行以下命令:
Add-Migration init -Project H.Test.Sqlite
4.2 应用迁移
Update-Database -Project H.Test.Sqlite
4.3 迁移文件结构
Migrations/
├── 20231101115422_init.cs # 迁移逻辑
├── 20231101115422_init.Designer.cs # 设计时代码(自动生成)
└── MyDataContextModelSnapshot.cs # 模型快照
4.4 迁移文件解析
public partial class init : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
// 创建表
migrationBuilder.CreateTable(
name: "mbc_dv_images",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("Sqlite:Autoincrement", true),
Name = table.Column<string>(nullable: true),
Url = table.Column<string>(nullable: true),
CreateTime = table.Column<DateTime>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_mbc_dv_images", x => x.Id);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
// 回滚:删除表
migrationBuilder.DropTable(
name: "mbc_dv_images");
}
}
五、依赖注入配置
5.1 在 App.xaml.cs 中配置
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// 配置依赖注入
var services = new ServiceCollection();
// 注册数据库上下文
services.AddDbContext<MyDataContext>(options =>
{
options.UseLazyLoadingProxies()
.UseSqlite("Data Source=Migration.db");
});
// 构建服务提供者
var serviceProvider = services.BuildServiceProvider();
// 设置全局服务提供者
ServiceLocator.SetProvider(serviceProvider);
}
}
六、数据操作示例
6.1 查询数据
using (var db = new MyDataContext())
{
// 查询所有记录
var images = db.mbc_dv_images.ToList();
// 条件查询
var filtered = db.mbc_dv_images.Where(x => x.Name.Contains("test")).ToList();
// 分页查询
var paged = db.mbc_dv_images.Skip(0).Take(10).ToList();
}
6.2 插入数据
using (var db = new MyDataContext())
{
var image = new mbc_dv_image
{
Name = "测试图片",
Url = "https://example.com/image.jpg",
CreateTime = DateTime.Now
};
db.mbc_dv_images.Add(image);
db.SaveChanges();
}
6.3 更新数据
using (var db = new MyDataContext())
{
var image = db.mbc_dv_images.FirstOrDefault(x => x.Id == 1);
if (image != null)
{
image.Name = "更新后的名称";
db.SaveChanges();
}
}
6.4 删除数据
using (var db = new MyDataContext())
{
var image = db.mbc_dv_images.FirstOrDefault(x => x.Id == 1);
if (image != null)
{
db.mbc_dv_images.Remove(image);
db.SaveChanges();
}
}
七、高级配置
7.1 延迟加载
optionsBuilder.UseLazyLoadingProxies();
7.2 连接字符串配置
// 方式1:直接硬编码
.UseSqlite("Data Source=Migration.db");
// 方式2:从配置文件读取
.UseSqlite(Configuration.GetConnectionString("DefaultConnection"));
// 方式3:使用内存数据库(适合测试)
.UseSqlite("Data Source=:memory:");
7.3 日志配置
optionsBuilder.LogTo(Console.WriteLine, LogLevel.Information);
八、项目运行
8.1 运行方式
- 打开解决方案
- 右键点击
H.Test.Sqlite项目 - 选择 “设为启动项目”
- 按 F5 运行
8.2 验证数据库
运行后会在项目目录下生成 Migration.db 文件,这就是 SQLite 数据库文件。
九、常见问题
9.1 迁移命令找不到
问题:执行 Add-Migration 时提示找不到命令
解决:
- 确保已安装
Microsoft.EntityFrameworkCore.Tools - 在 PMC 中选择正确的默认项目
- 使用完整命令:
Add-Migration init -Project H.Test.Sqlite -StartupProject H.Test.Sqlite
9.2 SQLite 数据库文件位置
问题:数据库文件在哪里?
解决:
- 默认在项目输出目录(bin/Debug/net8.0-windows/)
- 可以使用绝对路径:
Data Source=C:\Data\MyDatabase.db
9.3 延迟加载不生效
问题:关联实体为 null
解决:
- 确保启用了延迟加载:
UseLazyLoadingProxies() - 确保关联属性为
virtual:
public virtual ICollection<Child> Children { get; set; }
十、总结
H.Test.Sqlite 展示了 SQLite 数据库集成的完整流程:
- 创建 DataContext:继承 DbContext,定义实体集合
- 配置连接:使用 SQLite 提供程序
- 设计时工厂:支持 EF Core 命令行工具
- 迁移管理:创建和应用数据库迁移
- 数据操作:CRUD 操作示例
通过本教程,你应该已经掌握了在 WPF 应用中使用 SQLite 的基本方法。SQLite 是桌面应用的理想数据库选择,配合 EF Core 可以快速构建数据驱动的应用。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)