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

问题描述 投票:0回答:7

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

entity-framework
7个回答
59
投票
ExcludeFromMigrations()

方法实现这一点,但奇怪的是,您必须调用

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()); } }



44
投票
SetIsTableExcludedFromMigrations

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



11
投票
Ignore<ContactView>()

并使用此行运行迁移。完成后,我删除了这一行!


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



5
投票
DbContext

访问相关表。迁移绑定到一个

DbContext
(请参阅
是否可以对同一项目中的一个 DbContext 进行自动迁移,而不能对另一个 DbContext 进行自动迁移?
)。


4
投票
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)");
    });
}

这对我来说有点 hacky,但也许不是——因为,毕竟,我只是想“查看”表格,而不是写入它......

[使用 .NET Core EF 3.1.3 进行测试]

*** 更新 06/17/23:如果您坚持使用 EF3,上述解决方案仍然可行,但如果您使用 EF5+,您应该使用新的

ExcludeFromMigrations()

函数:

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


2
投票
[NotMapped]

注释。

    


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.