我在启用自动迁移的 Code First 模式下使用实体框架。现在,我有一个实体,其表不应该由 EF 管理(迁移)。有没有一种方法可以禁用一个特定实体(即表)的自动迁移?
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());
}
}
Ignore<ContactView>()
并使用此行运行迁移。完成后,我删除了这一行!
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// comment out this code after migrations are done
modelBuilder.Ignore<ContactView>();
}
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
[NotMapped]
注释。