我在 Asp.Net 核心中处理 Entity Framework 5,在迁移期间我得到以下错误,并且只有在我使用环境变量时才会给出。很明显,不使用环境变量就可以正常工作。
“在程序集 '.......DbMigrations' 中未找到 DbContext。确保您使用的是正确的程序集,并且该类型既不是抽象的也不是泛型的。”
我有 3 个不同的项目
API : 使用如下环境变量
public static void Main(string[] args)
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var builder = new ConfigurationBuilder()
.AddJsonFile($"appsettings.json", true, true)
.AddJsonFile($"appsettings.{environment}.json")
.AddEnvironmentVariables();
var pid = Process.GetCurrentProcess().Id;
Configuration = builder.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
CreateHostBuilder(args).Build().Run();
}
基础设施(BL): 其中 DBContext 注入如下
services.AddDbContext(options => options.UseNpgsql(configuration.GetConnectionString("DefaultConnection"), x => x.MigrationsAssembly(".....DbMigrations")) .UseLowerCaseNamingConvention());
注意: 我在 API 层中使用了以下类来解决我的问题。但我们不需要将其归入 API 层。还有其他办法吗?
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
public ApplicationDbContext CreateDbContext(string[] args)
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
var connectionString = configuration.GetConnectionString("DefaultConnection");
builder.UseNpgsql(configuration.GetConnectionString("DefaultConnection"), x => x.MigrationsAssembly(".........DbMigrations"))
.UseLowerCaseNamingConvention();
return new ApplicationDbContext(builder.Options);
}
}