问题描述
我在 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());
- DbMigrations:此项目用于商店迁移。
注意: 我在 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);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)