罪恶克星 发表于 2022-8-11 21:05:18

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(options => options.UseInMemoryDatabase("items"));// 使用Sqlite数据库作为开发时的持久化工具var connectionString = builder.Configuration.GetConnectionString("YourTestDb") ?? "Data Source=YourTestDb.db";builder.Services.AddSqlite<YourContext>(connectionString);进行数据模型的迁移

这里容易困扰,首先微软的Doc是这样说的https://img2022.cnblogs.com/blog/2905943/202206/2905943-20220625155418391-1374044065.jpg
但是我并没有成功,dotnet 命令用的少,于是换了种方法。
进入项目的程序包管理控制台
使用Add-Migration YourProjectName命令
如图:
https://img2022.cnblogs.com/blog/2905943/202206/2905943-20220625160004546-686287918.jpg
需要注意默认项目一定要选择需要进行Code First的项目
创建数据库实体

进入项目的程序包管理控制台
使用Update-Database命令
成功后就能在当前项目的根下看到对应的YourTestDb.db数据库文件,将文件的复制到输出目录属性更改为如果较新则复制即可。
参考

Entity Framework Core 工具参考 - Visual Studio 中的包管理器控制台

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: EF6+Sqlite3+MinimalApi 踩坑日记