2

これをモデルにマッピングするのに少し問題があります。(明らかに) 質問を表す 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; }
   }
4

1 に答える 1

1

個人的には、テーブル内の空白のエントリや、複数行テキストか単一行テキストかを知ることができる何らかの識別子であったとしても、すべての質問に対して QuestionOptions を使用します。

于 2013-07-11T16:30:22.190 に答える