这几天在学习.Net Web APi的开发,希望在开发环境使用相对自由点的Sqlite。使用Databse First 相对比较简单,而Code First搭建过程中遇到一些小问题,记录下来,希望能够帮助到掉入同样坑坑中的同学。
环境
创建.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(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数据库文件,将文件的复制到输出目录属性更改为如果较新则复制即可。
参考
Entity Framework Core 工具参考 - Visual Studio 中的包管理器控制台
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |