初始化数据库上下文时,如何禁用特定实体的表生成?
public class MyDbContext : DbContext {
public DbSet<MyEntity> MyEntity{ get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Ignore<MyEntity>();
base.OnModelCreating(modelBuilder);
}
}
此代码有帮助,但它完全排除了实体,我仍然需要查询它。
答案 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 {
....
}