在我的项目中,我有 2 个数据库:一个是我的自定义数据库,另一个是ApplicationDbContext
给Microsoft Identity
我的。
在我的Startup.cs
我有这个代码:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
ApplicationDbContext db, MyContext dbPSC)
{
// ...
db.Database.EnsureCreated();
db.Database.Migrate();
dbPSC.Database.EnsureCreated();
dbPSC.Database.Migrate();
}
不知道什么时候有迁移迁移,对吧?然后,我有2个错误:
ApplicationDbContext
除了第一次之外,每次应用程序启动时,迁移都会引发错误- 我的上下文的迁移似乎很好
使用的最佳做法是什么?是否有必要调用迁移ApplicationDbContext
?
更新
我已删除该Migration
文件夹。然后,改了Startup.cs
like
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
ApplicationDbContext db, MyContext dbPSC)
{
// ...
db.Database.EnsureCreated();
dbPSC.Database.EnsureCreated();
}
但是当应用程序启动时,它根本不会创建任何表。AuditDbContext
是因为我使用Audit.net
public class MyContext : AuditDbContext
{
public MyContext(DbContextOptions<MyContext> options) : base(options) { }
public DbSet<Message> Messages { get; set; }
public DbSet<AuditMessage> Audit_Messages { get; set; }
#region Common Tables
public DbSet<Country> Countries { get; set; }
public DbSet<AuditCountry> Audit_Countries { get; set; }
#endregion
#region Seed
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Seed();
}
#endregion
}
更新#2
我尝试了另一种解决方案,但它不起作用。解决方案是使用RelationalDatabaseCreator
如下代码
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
ApplicationDbContext db, MyContext dbPSC)
{
// ...
db.Database.EnsureCreated();
dbPSC.Database.EnsureCreated();
RelationalDatabaseCreator databaseCreator =
(RelationalDatabaseCreator)context.Database.GetService<IDatabaseCreator>();
databaseCreator.CreateTables();
}
作为Migrate()
,应用程序第一次运行时会创建表,但第二次会引发错误,因为表已经存在于数据库中。