2013-07-11 100 views
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; } 
    } 

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

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

我個人對所有問題QuestionOptions,即使是在表或空白項也許某種標識符,讓你知道它的多行或單行文本。

+0

QuestionOptions本質上是QuestionType的動態選項。因此對於ListQuestion,QuestionOptions將是列表的項目列表。確定是否是多行或單行是由QuestionType模型確定,而不是由QuestionOption模型確定 – theStig