EF との 1 対 1 の関係を正しく機能させることができません。ブログ、SO、および msdn ドキュメントを獲得しましたが、何も機能していないようです。
次のような Class と Exam の 2 つのモデルがあります。
[Table("classes")]
public class Class
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[StringLength(255), Required]
public string Title { get; set; }
public virtual Exam Exam { get; set; }
}
[Table("exams")]
public class Exam
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[DisplayFormat(DataFormatString = "{0:h:mm tt}")]
public DateTime? Time { get; set; }
public int ClassId { get; set; }
public virtual Class Class { get; set; }
}
クラスから試験に、試験からクラスにアクセスできるようにしたいのですが、どうやってもエラーが見つかります。
移行を作成/実行しようとすると、次のようになります。
The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.
これをコンテキストに追加すると:
protected override void OnModelCreating(DbModelBuilder builder)
{
builder.Entity<Exam>()
.HasRequired(e => e.Class)
.WithOptional(c => c.Exam);
}
次のエラーが表示されます。
System.Data.Entity.Infrastructure.DbUpdateException: Entities in 'BenchContext.Exams' participate in the 'Class_Exam' relationship. 0 related 'Class_Exam_Source' were found. 1 'Class_Exam_Source' is expected. ---> System.Data.UpdateException: Entities in 'BenchContext.Exams' participate in the 'Class_Exam' relationship. 0 related 'Class_Exam_Source' were found. 1 'Class_Exam_Source' is expected.
2つのモデル間の外部キーを正しく行う方法を流暢なAPIに伝える方法がわかりませんが、何も影響を与えないようです。
私は何が欠けていますか?