[英]Migration issues after replacing IdentityDbContext with regular DbContext
最初我使用 IdentityDbContext 有一段時間了。 一切正常,我正在進行遷移等。 但最近我決定讓 AWS Cognito 處理用戶和密碼,因此不再需要 IdentityDbContext。 所以我將我的 ApplicationDbContext class 改為繼承 DbContext 。
我清除了遷移和快照,殺死並修剪了 docker 容器。 一旦我嘗試進行初始遷移,我會在 Package 管理器控制台中收到以下錯誤:
An error occurred while accessing the Microsoft.Extensions.Hosting services.
Continuing without the application service provider.
Error: Object reference not set to an instance of an object.
Unable to create an object of type 'ApplicationDbContext'.
For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728
在做了一些研究之后,我添加了一個繼承 IDesignTimeDbContextFactory 的 class 並且我實際上能夠添加遷移,但第一個錯誤仍然存在:
An error occurred while accessing the Microsoft.Extensions.Hosting services.
Continuing without the application service provider.
Error: Object reference not set to an instance of an object.
我的項目結構已設置,因此啟動文件與 ApplicationDbContext Class 所在的項目不同,但它由 docker-compose 容器化。
Project.Api
- Startup.cs
- Program.cs
Project.App
- ApplicationDbContext.cs
- Migrations Folder
以下是我在 Startup.cs 中添加數據庫的方法:
var connectionString = Configuration.GetSection("ConnectionStrings").GetSection("DefaultConnection").Value;
services.AddDbContext<ApplicationDbContext>(options =>
{
options.UseNpgsql(connectionString,
b =>
{
b.MigrationsAssembly("Project.App");
});
});
ApplicationDbContext.cs 的樣子:
public ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options){}
// DbSet<Entities>...
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// ...
// ...
}
}
public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
private readonly DbConfig _dbConfig;
public ApplicationDbContextFactory(IOptionsMonitor<DbConfig> dbConfig)
{
_dbConfig = dbConfig.CurrentValue;
}
public ApplicationDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
optionsBuilder.UseNpgsql(_dbConfig.DefaultConnection);
return new ApplicationDbContext(optionsBuilder.Options);
}
}
當我運行遷移命令時,我 select 默認項目為 Project.App,在 Package 管理器控制台中我寫道:
Add-Migration initMigration -Context ApplicationDbContext -Project Project.App -StartupProject Project.Api.
如前所述,包含 DbContextFactory 時,它只顯示此錯誤:
An error occurred while accessing the Microsoft.Extensions.Hosting services.
Continuing without the application service provider.
Error: Object reference not set to an instance of an object.
最終成為 Program.cs 文件中的 AWS 配置,我沒有將我的 AWS 配置文件傳遞給 AWSOptions class。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.