2

我在将其映射到我的模型时遇到了一些问题。我有一个表示(显然)一个问题的 Question 模型和一个表示可能的问题类型(文本、多项选择、列表、多行文本等)的 QuestionType。

我现在遇到的问题是尝试将与每个 QuestionType 模型关联的选项设置回问题模型。例如,如果 QuestionType 是一个列表类型,并且该列表包含三个元素,我正在尝试将这些元素重新连接到 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; }
   }

问题类型模型

   [Table("QuestionTypes")]
   public class QuestionType {
      [Key]
      [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
      public int QuestionTypeId { get; set; }

      [Required]
      public String QuestionType { get; set; }

   }

问题选项模型

   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 回答