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");
}
}
项目结构:

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