これをモデルにマッピングするのに少し問題があります。(明らかに) 質問を表す Question モデルと、可能な質問の種類 (テキスト、複数選択、リスト、複数行テキストなど) を表す QuestionType があります。
私が今抱えている問題は、各 QuestionType モデルに関連付けられているオプションを Question モデルに戻そうとしていることです。たとえば、QuestionType がリスト タイプで、リストに 3 つの要素が含まれている場合、これらの要素を Question モデルに結合しようとしています。私が抱えている問題は、すべての質問に QuestionOptions 変数を設定する必要があるわけではないということです。たとえば、単純なテキストの質問 (コードには示されていません) の場合です。
これを達成する方法について何か提案はありますか?
質問モデル
[Table("Questions")]
public class Question {
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int QuestionId { get; set; }
[Required]
public String Question { get; set; }
public int QuestionTypeId { get; set; }
[ForeignKey("QuestionTypeId")]
public virtual QuestionType QuestionType { get; set; }
public virtual ICollection<QuestionOptions> QuestionOptions { get; set; }
}
QuestionType モデル
[Table("QuestionTypes")]
public class QuestionType {
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int QuestionTypeId { get; set; }
[Required]
public String QuestionType { get; set; }
}
QuestionOptions モデル
public abstract class QuestionOptions {
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int OptionId { get; set; }
public int? QuestionId { get; set; }
[ForeignKey("QuestionId")]
public virtual Question Question { get; set; }
}
[Table("questionType_List")]
public class ListQuestion : QuestionOptions {
[Required]
public String Item { get; set; }
}
質問コンテキスト
public class QuestionContext : DbContext {
public QuestionContext() : base("DefaultConnection") { }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
Database.SetInitializer<QuestionContext>(null);
public DbSet<Question> Questions { get; set; }
public DbSet<QuestionType> QuestionTypes { get; set; }
public DbSet<ListQuestion> ListQuestions { get; set; }
}