【问题标题】:Prevent table generation for a specific entity in EF6防止在 EF6 中为特定实体生成表
【发布时间】:2016-06-21 11:58:09
【问题描述】:

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

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

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

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

【问题讨论】:

  • 那么您是否尝试将实体映射到现有表?
  • 其实是现有的视图,是的。

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


【解决方案1】:

在不涉及太多细节的情况下,EF 会在查看迁移时将您的数据库结构生成的代码与之前生成的代码进行比较:它实际上并不是每次都与原始数据库进行比较。

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

【讨论】:

    【解决方案2】:

    您可以使用-IgnoreChanges 标志创建一个空迁移作为第一个迁移,以允许实体框架获取现有数据库的快照。例如:

    Add-Migration InitialMigration -IgnoreChanges
    

    【讨论】:

      【解决方案3】:

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

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

      或使用这样的数据注释

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

      【讨论】:

      • 据我所知,这仅允许覆盖默认命名约定。
      • 不正确,该属性或配置仅用于自定义表命名!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多