防止在EF6中为特定实体生成表

时间:2016-06-21 11:58:10

标签: c# .net entity-framework entity-framework-6 ef-migrations

初始化数据库上下文时,如何禁用特定实体的表生成?

public class MyDbContext : DbContext {
    public DbSet<MyEntity> MyEntity{ get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        modelBuilder.Ignore<MyEntity>();
        base.OnModelCreating(modelBuilder);
    }
}

此代码有帮助,但它完全排除了实体,我仍然需要查询它。

3 个答案:

答案 0 :(得分:2)

在没有详细介绍的情况下,EF在查看迁移时会将生成的代码与数据库结构生成的代码进行比较:它实际上并不是每次都与原始数据库进行比较。

您应该能够通过创建新的迁移,删除/注释掉UP中的表创建代码和DOWN中的表删除代码来绕过它想要创建表,并应用空迁移。它仍然在生成的代码中有视图,因此它不会再尝试添加它。

答案 1 :(得分:0)

您可以创建一个空迁移作为带有-IgnoreChanges标志的第一次迁移,以允许Entity Framework获取现有数据库的快照。例如:

Add-Migration InitialMigration -IgnoreChanges

答案 2 :(得分:0)

这会将您的实体映射到已存在的表或您案例中的视图

modelBuilder.Entity<entityname>().ToTable("Tablename");

或使用像这样的数据注释

[Table("tablename")] 
public class ClassName {
....
}