我首先使用实体框架代码来获取包含多项选择题的简单数据库。每个问题有多个可能的答案,并指定一个作为正确的答案。实体框架可选关系导致“冲突多重性”
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"));
我试图让同样的关系工作。我正在使用EF6,并且知道我试图建立完整的代码并且它不起作用。 EF6可能有一些变化?! – dixus 2015-10-22 07:10:55