You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework Core中DbContext连接字符串及迁移相关疑问

解决方案

一、让AppSecurityDataContext获取引用项目的连接字符串

类库本身不应该直接读取宿主项目的配置文件,正确的做法是让宿主项目(Acme.Widgets)主动传入连接字符串,在类库中提供注册DbContext的扩展方法:

  1. 在Framework.AppSecurity项目中添加DbContext注册扩展:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

namespace Framework.AppSecurity;

public static class AppSecurityDbContextExtensions
{
    // 扩展方法,接收宿主传入的连接字符串
    public static IServiceCollection AddAppSecurityDbContext(this IServiceCollection services, string connectionString)
    {
        services.AddDbContext<AppSecurityDataContext>(options =>
            // 根据你的数据库类型调整,比如UseSqlServer/UseMySql等
            options.UseSqlServer(connectionString));
        
        return services;
    }
}
  1. 在Acme.Widgets项目的Program.cs中注册:
var builder = WebApplication.CreateBuilder(args);

// 从自身的appsettings.json读取连接字符串
var acmeDbConn = builder.Configuration.GetConnectionString("AcmeWidgetsDb");
// 传入连接字符串注册类库的DbContext
builder.Services.AddAppSecurityDbContext(acmeDbConn);

这样AppSecurityDataContext就能使用宿主项目的连接字符串,完全解耦配置依赖。

二、EF Core 6迁移时获取连接字符串

因为DbContext在类库中,迁移需要依赖宿主项目的配置,执行命令时必须指定启动项目为Acme.Widgets:

方式1:Package Manager Console(PMC)

  • 打开PMC,将默认项目设置为Framework.AppSecurity
  • 执行迁移命令:
# 添加迁移
Add-Migration AddSecurityTables -StartupProject Acme.Widgets
# 更新数据库
Update-Database -StartupProject Acme.Widgets

方式2:.NET CLI

在终端中执行:

# 添加迁移
dotnet ef migrations add AddSecurityTables --project Framework.AppSecurity --startup-project Acme.Widgets
# 更新数据库
dotnet ef database update --project Framework.AppSecurity --startup-project Acme.Widgets

执行时EF Core会加载Acme.Widgets的appsettings.json,自动读取对应的连接字符串完成迁移操作。

内容的提问来源于stack exchange,提问作者CoderForHire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:22:41