2013-07-11 4 views
2

내 모델에이 문제를 매핑하는 데 문제가 있습니다. Question (명백하게) 질문을 나타내는 Question 모델과 가능한 질문 유형 (텍스트, 객관식, 목록, 여러 줄 텍스트 등)을 나타내는 QuestionType이 있습니다.모델에 0 대 다수 관계 매핑

지금 문제는 각 QuestionType 모델과 관련된 옵션을 Question Model (질문 모델)로 다시 설정하려고하는 것입니다. 예를 들어 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은 목록 항목 목록입니다. 무언가가 멀티 라인인지 싱글 라인인지를 결정하는 것은 QuestionOption 모델이 아니라 QuestionType 모델에 의해 결정됩니다 – theStig