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

时间:2018-06-30 20:14:30

标签: c# entity-framework-core asp.net-core-2.0

我将网站解决方案分为多个项目,其中之一具有数据库类。当我尝试生成第一次迁移时,出现以下错误:

  

实体框架核心2.0.3-rtm-10026初始化了'SiteDBContext'   使用提供程序“ Microsoft.EntityFrameworkCore.SqlServer”和选项:   没有

     

使用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 个答案:

答案 0 :(得分:1)

您已经很接近了,但是第二级配置是通过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 :(得分:0)

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

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

问题是我在解决方案目录上执行以下代码,该目录显然不包含EF Core文件,并且不在需要填充迁移文件(Data Access Layer folder)的目录上。您的情况可能有所不同,但请确保更改DbContext文件所在的文件夹。

因此,我将目录更改为“数据访问层”文件夹,由于我的启动项目位于Core.Web文件夹中,所以这也是我执行以下代码的时间,并且这也是包含我的Startup.cs文件的文件夹。 (-s means startup

dotnet ef migrations add initialcreate -s ..\Core.Web\Core.Web.csproj