2012-07-19 60 views
2

我首先使用实体​​框架代码来获取包含多项选择题的简单数据库。每个问题有多个可能的答案,并指定一个作为正确的答案。实体框架可选关系导致“冲突多重性”

public class Question 
{ 
    public int QuestionId { get; set; } 

    [ForeignKey("CorrectAnswer")] 
    public int CorrectAnswerId { get; set; } 
    public string Text { get; set; } 

    public virtual ICollection<Answer> Answers { get; set; } 

    public virtual Answer CorrectAnswer { get; set; } 
} 

public class Answer 
{ 
    public int AnswerId { get; set; } 
    [ForeignKey("Question")] 
    public int QuestionId { get; set; } 
    public string Text { get; set; } 

    public virtual Question Question { get; set; } 
} 

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Answer>() 
     .HasRequired(a => a.Question) 
     .WithMany(q => q.Answers) 
     .HasForeignKey(a => a.QuestionId) 
     .WillCascadeOnDelete(false); 
} 

这一切工作正常,但我需要避免赶上22日情况,因为它需要一个正确的答案,你不能创建一个问题,但由于它需要一个问题,你不能创建一个答案。所以我想让CorrectAnswerId字段为空,允许你创建问题,然后是答案,然后指定正确的答案。

我已经试过以下变化,但总是得到一个 “矛盾的多重” 例外:

modelBuilder.Entity<Question>() 
      .HasOptional(q => q.CorrectAnswer) 
      .WithRequired(a => a.Question) 
      .Map(p => p.MapKey("CorrectAnswerId")); 
+0

我试图让同样的关系工作。我正在使用EF6,并且知道我试图建立完整的代码并且它不起作用。 EF6可能有一些变化?! – dixus 2015-10-22 07:10:55

回答

3

变化

int CorrectAnswerId {get;set;} 

int? CorrectAnswerId {get;set;} 
+0

谢谢,这个工程。我应该自己尝试过这个,但是我看到的另一个stackoverflow问题说它不起作用。 :) – 2012-07-19 16:39:39

+0

一个不同的场景可能?反正yw – BonyT 2012-07-19 16:43:04