从零到多的关系映射到模型

时间:2013-07-11 01:26:47

标签: sql sql-server entity-framework

我有一个问题,将其映射到我的模型。我有一个问题模型,代表(显然)一个问题,一个问题类型代表可能的问题类型(文本,多项选择,列表,多行文本,等等......)。

我现在遇到的问题是尝试将与每个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; }

   }

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; }
   }

QuestionContext

   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; }
   }

1 个答案:

答案 0 :(得分:1)

我个人会对所有问题都有QuestionOptions,即使这是表格中的空白条目,也可能是某种标识符,可以让你知道它的多行或单行文字。