2

私は最初に、多肢選択問題を含む単純なデータベースにEntityFrameworkコードを使用しています。各質問には複数の可能な回答があり、1つを正解として指定します。

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フィールドをnull許容にして、質問を作成し、次に回答を作成してから、正解を指定できるようにします。

次のバリエーションを試しましたが、常に「競合する多重度」の例外が発生します。

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

1 に答える 1

3

変化する

 int CorrectAnswerId {get;set;}

int? CorrectAnswerId {get;set;}
于 2012-07-19T16:35:07.703 に答える