问题描述
目前我必须在我们的数据库中实现各种问题表。
这是我当前的 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 (将#修改为@)