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

时间:2014-02-26 10:43:56

标签: entity-framework

我在Code First模式下使用Entity Framework并启用了自动迁移。现在,我有一个实体,其表格由EF管理(迁移)。有没有办法禁用一个特定实体(即表)的自动迁移?

6 个答案:

答案 0 :(得分:3)

不确定这是否是OP的确切方案,但是我有一个不希望为其生成迁移的表。我是通过在DbContext中使用ToView而不是ToTable来实现的:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<MyTable>(entity => {
        // Migration will not be generated for this table
        entity.ToView("MyTable", "dbo");

        entity.Property(e => e.FooBar).HasColumnType("DECIMAL(19,9)");
    });
}

这对我来说有点不客气,但也许不是-因为毕竟,我只是试图“查看”表,而不是对其进行写...

[使用.NET Core EF 3.1.3测试]

答案 1 :(得分:2)

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


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<MyEntity>().Metadata.SetIsTableExcludedFromMigrations(true);
}

答案 2 :(得分:1)

可以使用另一个DbContext来访问相关表格。迁移绑定到一个DbContext(请参阅Is it possible to have automatic migrations for one DbContext and not for another in the same project?)。

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

您想在该类/实体上使用[NotMapped]注释。

答案 5 :(得分:0)

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

https://devblogs.microsoft.com/dotnet/announcing-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());
    }
}