不同项目方法的实体框架核心迁移问题

时间:2021-05-27 07:38:53

标签: entity-framework-5 entity-framework-migrations

我在 Asp.Net 核心中处理 Entity Framework 5,在迁移期间我得到以下错误,并且只有在我使用环境变量时才会给出。很明显,不使用环境变量就可以正常工作。

“在程序集 '.......DbMigrations' 中未找到 DbContext。确保您使用的是正确的程序集,并且该类型既不是抽象的也不是泛型的。”

我有 3 个不同的项目

  1. 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();
     }
    
  2. 基础设施(BL): 其中 DBContext 注入如下

services.AddDbContext(options => options.UseNpgsql(configuration.GetConnectionString("DefaultConnection"), x => x.MigrationsAssembly(".....DbMigrations")) .UseLowerCaseNamingConvention());

  1. 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);
        }
    }

0 个答案:

没有答案