我在Code First模式下使用Entity Framework并启用了自动迁移。现在,我有一个实体,其表格不由EF管理(迁移)。有没有办法禁用一个特定实体(即表)的自动迁移?
答案 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
。
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());
}
}