代码之家  ›  专栏  ›  技术社区  ›  Ali Bdeir

在EF Core 5中将继承视为一个类

  •  0
  • Ali Bdeir  · 技术社区  · 3 年前

    我有课 ApplicationUser 和一个班级 vwUserConfig vwUserConfig 是数据库中的视图,它的所有列都是 应用程序用户 包括更多。

    我想要,也需要, vwUserConfig 继承自 应用程序用户 。但在配置视图时:

    modelBuilder.Entity<ApplicationUser>().ToTable("AspNetUsers");
    modelBuilder.Entity<VwUserConfig>().ToView("vwUserConfig");
    

    我收到一个错误,指示我无法呼叫 .HasNoKey() 因为它继承自 应用程序用户 :

    系统InvalidOperationException:“VwUserConfig”不能配置为无键,因为它是派生类型;根类型“ApplicationUser”必须配置为无键。如果您不打算在模型中包含“ApplicationUser”,请确保它未被上下文中的DbSet属性引用、未在“OnModelCreating”中对ModelBuilder的配置调用中引用,也未从模型中包含的类型的导航中引用。

    如果我删除 。HasNoKey() ,我得到一个错误:

    系统InvalidOperationException:“VwUserConfig”和“ApplicationUser”都映射到表“AspNetUsers”。层次结构中没有鉴别器的所有实体类型都必须映射到不同的表。看见 https://go.microsoft.com/fwlink/?linkid=2130430 了解更多信息。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Ali Bdeir    3 年前

    在仔细研究之后,我意识到出于某种原因,EF Core仍然认为 VwUserConfig 应该 映射到 AspNetUsers ,即使我在打电话 .ToView() 。为了避免这种情况,我不得不做这个黑客:

    modelBuilder.Entity<VwUserConfig>().ToTable("jcudncyd").ToView("vwUserConfig");
    

    我必须将其分配到一个随机的、不存在的表中,才能取消映射(?)到 ASP网络用户 。这似乎是个bug。