我创建了一个具有db表的第3方库。该库的目的是在我拥有的其他多个项目中使用。它提供基础结构工作(特定的用户权限)。因此,为了不在每个服务中编写相同的代码,我将其重构为一个库。这个libpublic类
public class UserAccessContext : DbContext
{
public UserAccessContext(DbContextOptions options)
: base(options)
{
Database.Migrate();
}
public DbSet<ClientPermission> ClientPermission{ get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ClientPermission>().HasKey(c => new { c.UserId, c.PermissionId});
}
}
我已经创建了迁移脚本(Add-Migration ...),该脚本似乎还可以。它创建ClientPermission表。将库导入到其中一个服务(服务A)中,可以看到启动Service A时UserAccess库的迁移脚本未运行。唯一运行的迁移脚本是属于ServiceA的迁移脚本。调用UserAccessContext
时,将执行Database.Migrate()
,但找不到需要应用的任何更改。
为什么会发生这种情况,如何执行它来运行UserAccessContext
迁移脚本?
答案 0 :(得分:1)
确保在DbContextOptions中使用正确的MigrationsAssembly。默认情况下,将使用当前程序集,但您需要使用迁移代码所在的程序集(如果我对您很了解,请在这里的库中使用)。检查此链接: https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/projects?tabs=dotnet-core-cli