设置多个AddDbContext()选项的正确方法是什么?

4
我将我的站点解决方案分为多个项目,其中一个项目包含数据库的类。当我尝试生成第一个迁移时,会出现以下错误:
Entity Framework Core 2.0.3-rtm-10026 使用 Microsoft.EntityFrameworkCore.SqlServer 提供程序初始化“SiteDBContext”,选项为:None 通过使用 DbContextOptionsBuilder 更改您的迁移程序集。例如,options.UseSqlServer(connection, b => b.MigrationsAssembly(""))。默认情况下,迁移程序集是包含 DbContext 的程序集。
通过使用包管理器控制台的默认项目下拉列表或在包含迁移项目的目录中执行 "dotnet ef" 来更改您的目标项目到迁移项目。
您的目标项目''与您的迁移程序集''不匹配。请更改您的目标项目或更改您的迁移程序集。
通过使用 DbContextOptionsBuilder 更改您的迁移程序集。例如,options.UseSqlServer(connection, b => b.MigrationsAssembly(""))。默认情况下,迁移程序集是包含 DbContext 的程序集。通过使用包管理器控制台的默认项目下拉列表或在包含迁移项目的目录中执行 "dotnet ef" 来更改您的目标项目到迁移项目。
我想在连接字符串命令旁边添加此 MigrationsAssembly 选项,但无法确定如何准确地实现它。
我的当前代码为:
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddDbContext<SiteDBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("FFInfoDB")));
    }

我尝试过:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddDbContext<SiteDBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("FFInfoDB"), options.MigrationsAssembly("FFInfo.DAL")));
    }

但我遇到了错误

DbContextOptionsBuilder没有包含MigrationsAssembly的定义

添加第二个选项的正确方法是什么?

2个回答

2

您很接近了,但第二级配置是通过一个Action<SqlServerDbContextOptionsBuider>来完成的,而不是通过原始的Action<DbContextOptionsBuilder> options参数。

因此,请使用以下内容:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddDbContext<SiteDBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("FFInfoDB"), sqlServerOptions => sqlServerOptions.MigrationsAssembly("FFInfo.DAL")));
}

1

我也遇到了同样的问题,但解决方法有所不同。我的ConfigureServices几乎与上面的答案相同,但仍然遇到了同样的问题:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContextPool<AppDbContext>(option =>
        { 
           option.UseSqlServer(Configuration.GetConnectionString("ConnectionStringName")); //I set this on appsettings.json
        });
    }

问题在于我在我的解决方案目录上执行下面的代码,这显然不包含EF Core文件,也不是需要填充迁移文件的目录(数据访问层文件夹)。您的情况可能不同,但请确保更改您的DbContext文件所在的文件夹。
因此,我将我的目录更改为数据访问层文件夹,然后在那个时候才执行下面的代码,因为我的启动项目在Core.Web文件夹上,这也是包含我的Startup.cs文件的文件夹。(-s意味着启动
dotnet ef migrations add initialcreate -s ..\Core.Web\Core.Web.csproj

那正是我的情况。非常感谢您发布有用的答案。 - Maroun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接