我将网站解决方案分为多个项目,其中之一具有数据库类。当我尝试生成第一次迁移时,出现以下错误:
实体框架核心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定义
添加第二个选项的正确方法是什么?
答案 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