EF Core的DB first模式使用已存在的sqlite数据库

1.引入的包nuget包版本如下。
  <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.10" />
2.准备好自己的db
3.在program里面添加AddDbContext即可
//添加sqlite3 数据库
        builder.Services.AddDbContext<FrameworkDbContext>(opt =>
        {
            var connectStr = @"Data Source=./Db/database.db;";
            opt.UseSqlite(connectStr);
        });
FrameworkDbContext代码,配置DbSet的。
using GameSaveSystemApi.Models;
using Microsoft.EntityFrameworkCore;

namespace GameSaveSystemApi.Infrastructure;

public class FrameworkDbContext : DbContext
{
    //数据库表
    public DbSet<Game> Games { get; set; }
    
    
    public FrameworkDbContext(DbContextOptions<FrameworkDbContext> options) : base(options)
    {

    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        builder.ApplyConfigurationsFromAssembly(GetType().Assembly);
    }
}
Game是实体类,而GameConfig是对应的配置,比如实体类字段与数据库表不一致,或者其他的。这里的使用方法是EF Core的,所有数据库都一样,其他用法可以参考https://learn.microsoft.com/en-us/ef/core/modeling/table-splitting
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace GameSaveSystemApi.Models;

public class GameConfig : IEntityTypeConfiguration<Game>
{
    public void Configure(EntityTypeBuilder<Game> builder)
    {
        //设置实体与已有数据库表映射
        builder.ToTable("games");
        //表主键
        builder.HasKey(e => e.Title);

        builder.Property(e => e.Title)
            .HasColumnName("title");

        builder.Property(e => e.WikiPageId)
            .HasColumnName("wiki_page_id");

        builder.Property(e => e.InstallFolder)
            .HasColumnName("install_folder");

        builder.Property(e => e.SteamId)
            .HasColumnName("steam_id");

        builder.Property(e => e.GogId)
            .HasColumnName("gog_id");

        builder.Property(e => e.SaveLocation)
            .HasColumnName("save_location");

        builder.Property(e => e.Platform)
            .HasColumnName("platform");

        builder.Property(e => e.GameChineseName)
            .HasColumnName("zh_CN");
    }
}
项目结构:

image-20251114115018415

没什么技术,很久没用EF Core了,单纯记录下,方便自己以后