如何在WPF(C#/Visual Studio 2022)中绘制SQLite Schema并生成表?
绘制SQLite Schema与生成数据库表的常用方法
一、SQLite Schema 绘制工具
- SQLiteStudio:自带可视化Schema设计器,拖拽就能创建表、设置字段类型、主键外键,完成后可直接导出建表SQL脚本。
- DB Browser for SQLite:开源免费工具,有直观的表设计界面,支持可视化编辑表结构,能一键生成对应的建表语句。
- Visual Studio 扩展工具:安装
SQLite/SQL Server Compact Toolbox扩展后,在VS内就能直接设计Schema,同步生成SQL代码,不用切换外部工具。
二、基于Schema生成数据库表的方法
1. 手动编写SQL脚本执行
先根据设计好的Schema写出建表SQL,示例:
CREATE TABLE IF NOT EXISTS Users ( Id INTEGER PRIMARY KEY AUTOINCREMENT, Username TEXT NOT NULL UNIQUE, Email TEXT, CreateTime DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS Orders ( OrderId INTEGER PRIMARY KEY AUTOINCREMENT, UserId INTEGER NOT NULL, TotalAmount REAL, FOREIGN KEY (UserId) REFERENCES Users(Id) );
然后在C#代码里通过SQLiteConnection执行脚本:
using System.Data.SQLite; string dbPath = @"C:\YourWpfApp\app_data.db"; using (var conn = new SQLiteConnection($"Data Source={dbPath};Version=3;")) { conn.Open(); string createTablesSql = "-- 替换为你的建表SQL"; using (var cmd = new SQLiteCommand(createTablesSql, conn)) { cmd.ExecuteNonQuery(); } }
2. 使用ORM框架(高效便捷)
Entity Framework Core (EF Core)
首先安装NuGet包Microsoft.EntityFrameworkCore.Sqlite,然后根据Schema定义实体类:
public class User { public int Id { get; set; } public string Username { get; set; } public string Email { get; set; } public DateTime CreateTime { get; set; } = DateTime.Now; public List<Order> Orders { get; set; } = new(); } public class Order { public int OrderId { get; set; } public int UserId { get; set; } public decimal TotalAmount { get; set; } public User User { get; set; } }
接着创建DbContext:
public class AppDbContext : DbContext { public DbSet<User> Users { get; set; } public DbSet<Order> Orders { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite(@"Data Source=C:\YourWpfApp\app_data.db"); } }
最后生成表:
- 打开VS的包管理器控制台,执行:
Add-Migration InitialCreate Update-Database - 或者在WPF启动时自动初始化:
using (var db = new AppDbContext()) { db.Database.EnsureCreated(); // 数据库不存在则创建,自动生成所有表 }
Dapper(轻量ORM)
Dapper本身不自动生成表,但可以结合Schema生成的SQL脚本快速执行:
using Dapper; using System.Data.SQLite; string dbPath = @"C:\YourWpfApp\app_data.db"; using (var conn = new SQLiteConnection($"Data Source={dbPath};Version=3;")) { conn.Open(); string createTableSql = "CREATE TABLE IF NOT EXISTS Users (...)"; conn.Execute(createTableSql); }
3. 动态生成表(适合灵活场景)
如果需要根据动态定义的Schema生成表,可以写一个通用方法:
public void CreateTable(SQLiteConnection conn, string tableName, Dictionary<string, string> columnDefinitions) { var columns = string.Join(", ", columnDefinitions.Select(kv => $"{kv.Key} {kv.Value}")); string sql = $"CREATE TABLE IF NOT EXISTS {tableName} ({columns})"; using (var cmd = new SQLiteCommand(sql, conn)) { cmd.ExecuteNonQuery(); } } // 使用示例 var userColumns = new Dictionary<string, string> { {"Id", "INTEGER PRIMARY KEY AUTOINCREMENT"}, {"Username", "TEXT NOT NULL UNIQUE"}, {"Email", "TEXT"} }; using (var conn = new SQLiteConnection($"Data Source={dbPath};Version=3;")) { conn.Open(); CreateTable(conn, "Users", userColumns); }
内容的提问来源于stack exchange,提问作者Jose Silva
相关产品推荐
相关产品推荐

