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数据库文件,将文件的复制到输出目录属性更改为如果较新则复制即可。

浙公网安备 33010602011771号