【问题标题】:Entity Framework creating table hierarchy when I don't want to [duplicate]当我不想 [重复] 时,实体框架创建表层次结构
【发布时间】:2022-01-18 13:30:33
【问题描述】:

我有两个班级SomeClassSomeDerivedClass

public abstract class SomeClass
{
    int Id { get; set; }
    public string BaseField { get; set; }  
}

public class SomeOtherClass : SomeClass
{
     public string SomeField { get; set; }
}

但是,无论我尝试什么,Entity Framework 都会尝试对数据库中的层次结构进行建模。我根本不想在架构中考虑 SomeClass,我只希望 SomeOtherClass 作为自己完全独立的实体。

我想要一个名为 SomeOtherClass 的表,其中包含 IdBaseFieldSomeField 列。但是,Entity Framework 总是尝试创建一个名为 SomeClass 的表,其中包含一个鉴别器列,或者每个表一个表。

我尝试过的事情清单:

  • OnModelCreating 中的两个实体调用.ToTable("SomeOtherClass")。仍然添加了一个鉴别器列。尝试添加HasNoDiscriminator(),但随后出现错误

层次结构中没有鉴别器的所有实体类型必须映射到不同的表`

  • SomeClass 上调用.ToView(null),在SomeOtherClass 上调用.ToTable("SomeOtherClass")。在这种情况下,表会丢失基列 (BaseField)
  • 在两者上都调用 .HasBaseType<SomeClass> .HasBaseType<SomeOtherClass >,但随后我收到关于无效层次结构的错误。
  • 制作基类abstract似乎没有效果。

如何在实体框架中继承一个类而不尝试在架构中创建层次结构?

【问题讨论】:

    标签: entity-framework-core ef-core-6.0


    【解决方案1】:

    https://stackoverflow.com/a/49997115/472966找到答案

    我有另一个实体直接引用SomeClass,这让 EF Core 认为它是一个实体而不仅仅是一个类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多