C# EF核心第三方库迁移未运行
我已经创建了一个具有db表的第三方库。这个库的目的是在我的其他几个项目中使用。它提供基础设施工作(特定用户权限)。因此,为了避免在每个服务中编写相同的代码,我将其重构为一个库。这是公共课C# EF核心第三方库迁移未运行,c#,.net,entity-framework,.net-core,entity-framework-core,C#,.net,Entity Framework,.net Core,Entity Framework Core,我已经创建了一个具有db表的第三方库。这个库的目的是在我的其他几个项目中使用。它提供基础设施工作(特定用户权限)。因此,为了避免在每个服务中编写相同的代码,我将其重构为一个库。这是公共课 public class UserAccessContext : DbContext { public UserAccessContext(DbContextOptions options) : base(options) { Database.Migrate()
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});
}
}
public类UserAccessContext:DbContext
{
公共UserAccessContext(DbContextOptions选项)
:基本(选项)
{
Database.Migrate();
}
public DbSet ClientPermission{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity().HasKey(c=>new{c.UserId,c.PermissionId});
}
}
我已经创建了迁移脚本(添加迁移…),脚本看起来还可以。它创建ClientPermission表。已将库导入其中一个服务(服务A),我可以看到在启动服务A时UserAccess库的迁移脚本未运行。唯一运行的迁移脚本是属于服务A的迁移脚本。调用UserAccessContext
时,将执行Database.Migrate()
,但未找到需要应用的任何更改。
为什么会发生这种情况?我如何强制执行它以运行迁移脚本?确保在DbContextOptions中使用正确的迁移程序集。默认情况下,将使用当前程序集,但您需要使用迁移代码所在的程序集(如果我了解您的情况,请在此处使用您的库)。检查此链接:
检查数据库中的迁移表,确保在DbContextOptions中使用了正确的迁移程序集。默认情况下,将使用当前程序集,但您需要使用迁移代码所在的程序集(如果我了解您的情况,请在此处使用您的库)。查看此链接:@CemSOYDING可能我最初的帖子不清楚。这是一个第三方库。我目前有ServiceADbContext和UserAccessContext。每个上下文都创建了自己的迁移脚本。UserAccessContext属于LibraryUserAccess,并创建了自己的迁移脚本。此脚本不会与ServiceADbContext迁移脚本一起执行。是的,那么您是对的,它应该可以工作。我刚刚测试了以下设置:一个带有模型、DbContext和迁移代码的类库,一个引用库并使用DbContext的控制台应用程序。我可以看到应用了迁移。可能与您正在使用的数据库提供程序有关?(我用SQLite做了测试)是的,你是对的。它起作用了。我将第三部分库dll指定为UserAccessContext选项的迁移程序集。谢谢