EF6+Sqlite3+MinimalApi 踩坑日记
这几天在学习.Net Web APi的开发,希望在开发环境使用相对自由点的Sqlite。使用Databse First 相对比较简单,而Code First搭建过程中遇到一些小问题,记录下来,希望能够帮助到掉入同样坑坑中的同学。
环境
- VS2022
- .Net 6.0
创建.Net Web Api项目,并且选择最小API
通过Nuget添加相关包
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Design
- Microsoft.EntityFrameworkCore.Tools
- Microsoft.EntityFrameworkCore.Sqlite
创建数据实体模型
这个比较简单,直接贴代码
public class User:BaseEntity
{
public int Id { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
public string? Account { get; set; }
}
创建DbContext
public class YourContext:DbContext
{
public YourContext(DbContextOptions options): base(options) { }
public DbSet<User> User { get; set; }
}
设置数据库的ConnectionString
编辑Program.cs
:
var connectionString = builder.Configuration.GetConnectionString("YourTestDb") ?? "Data Source=YourTestDb.db";
这表示builder首先会去配置文件appSettings.json
中寻找key="YourTestDb"
的Value。
就像这样:
{
"ConnectionStrings": {
"YourTestDb": "Data Source=yourTestDb.db;foreign keys=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
将DbContext添加到服务当中
编辑Program.cs
:
builder.Services.AddSqlite<YourContext>(connectionString);
总之Program.cs
应该长这样
var builder = WebApplication.CreateBuilder(args);
// Use InMemory Database, 需要通过NuGet安装 EntityFramework.InMemory
//builder.Services.AddDbContext<YourContext>(options => options.UseInMemoryDatabase("items"));
// 使用Sqlite数据库作为开发时的持久化工具
var connectionString = builder.Configuration.GetConnectionString("YourTestDb") ?? "Data Source=YourTestDb.db";
builder.Services.AddSqlite<YourContext>(connectionString);
进行数据模型的迁移
这里容易困扰,首先微软的Doc是这样说的
但是我并没有成功,dotnet 命令用的少,于是换了种方法。
进入项目的程序包管理控制台
使用Add-Migration YourProjectName
命令
如图:
需要注意默认项目一定要选择需要进行Code First的项目
创建数据库实体
进入项目的程序包管理控制台
使用Update-Database
命令
成功后就能在当前项目的根下看到对应的YourTestDb.db
数据库文件,将文件的复制到输出目录属性更改为如果较新则复制即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!