如何从实体框架中的自动代码优先迁移中排除一个表?

Dej*_*jan 12 entity-framework

我在 Code First 模式下使用实体框架并启用自动迁移。现在,我有它的表应该一个实体不能由EF管理(迁移)。有没有办法禁用一个特定实体(即表)的自动迁移?

Fer*_*ndr 44

在 EFCore 5.0 中对我有用的另一个选项是使用SetIsTableExcludedFromMigrations:


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<MyEntity>().Metadata.SetIsTableExcludedFromMigrations(true);
}
Run Code Online (Sandbox Code Playgroud)

  • 使用这种方法,您不需要知道表名,它可能是也可能不是“nameof(Users)” (15认同)

Tob*_*s J 13

现在可以在 EF Core 5.0 中使用该ExcludeFromMigrations()方法,但奇怪的是,您必须调用该ToTable()方法,然后使用TableBuilder.

https://devblogs.microsoft.com/dotnet/annoucing-entity-framework-core-efcore-5-0-rc1/#exclude-tables-from-migrations

public class ReportingContext : DbContext
{
    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>().ToTable(nameof(Users), t => t.ExcludeFromMigrations());
    }
}
Run Code Online (Sandbox Code Playgroud)


and*_*fox 6

我的临时解决方案,仅适用于开发环境。我有一个单独的脚本运行迁移和程序运行不检查它们。因此,在意外情况下,我可以Ignore<ContactView>()使用此行调用和运行迁移。完成后,我删除了这一行!

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // comment out this code after migrations are done
        modelBuilder.Ignore<ContactView>();
    }
Run Code Online (Sandbox Code Playgroud)


Dej*_*jan 5

可以通过使用另一个DbContext来访问有问题的表。迁移绑定到一个DbContext(请参阅是否可以对一个 DbContext 进行自动迁移,而不能对同一项目中的另一个 DbContext 进行自动迁移?)。