关于 EF6 (CodeFirst) 使用哪种继承策略的困惑

问题描述

我对实体框架的代码优先方法的继承策略有疑问。

目前我必须在我们的数据库中实现各种问题表。

这是我当前的 QuestionBase 类,它具有每种类型的问题所需的所有属性

public class QuestionBase 
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int QuestionId { get; set; }

    [required]
    public QuestionType QuestionType { get; set; }

    public string ShortDescription { get; set; } = string.Empty;

    [required(AllowEmptyStrings = true)]
    public string QuestionText { get; set; } = string.Empty;

    [required] 
    public double Maxscore { get; set; }

    public bool MixedAnswers { get; set; } = true;
}

目前我只有两种不同类型的问题:SingleChoice 和 MultipleChoice。 这些类型之间的唯一区别是导航属性,如下所示:

public class SingleChoiceQuestion : QuestionBase
{
    public virtual List<SingleChoiceAnswer> Answers { get; set; }
}
public class MultipleChoiceQuestion : QuestionBase
{
    public virtual List<MultipleChoiceAnswer> Answers { get; set; }
}

我当前的方法导致每个层次结构继承的表。一旦我添加一个包含附加属性的新问题类型,QuestionBase 表将被附加列扩展。这不是我想要的。

每个类型继承的表不是一个选项,因为我不知道将来会添加多少不同的问题类型。恐怕,不同问题类型的数量可能会导致性能问题。

每个具体类继承的表也不是我想要的。

我也考虑过不使用继承,而是使用外键和导航属性。但后来我意识到,至少我的前两个问题类型会导致额外的表,只有 QuestionBase 表的外键,因为它们没有其他属性。这似乎不对。

我可以尝试其他任何方法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)