私は3つのクラスを持っています:
public partial class Student : Contact
{
//Inherited from Contact:
//public int ContactId { get; set; }
//public string FirstName { get; set; }
//public string LastName { get; set; }
public virtual StudentExam StudentExam { get; set; }
}
public partial class Exam
{
public int ExamId { get; set; }
public string Title { get; set; }
public DateTime Date { get; set; }
public virtual StudentExam StudentExam { get; set; }
}
public partial class StudentExam
{
public byte Score { get; set; }
public int ContactId { get; set; }
public int ExamId { get; set; }
public virtual Student Student { get; set; }
public virtual Exam Exam { get; set; }
}
DbContext を初期化しようとすると、次のエラーがスローModelValidationException
されます: モデルの生成中に 1 つ以上の検証エラーが検出されました:
\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'StudentExam' にキーが定義されていません。この EntityType のキーを定義します。\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'StudentExams' は、キーが定義されていないタイプ 'StudentExam' に基づいています。
StudentExam
クラスのプロパティを次のように変更してみました。
[Key, ForeignKey("Student"), Column(Order = 0)]
public int ContactId { get; set; }
[Key, ForeignKey("Exam"), Column(Order = 1)]
public int ExamId { get; set; }
今、私はこの例外を受け取ります:
\tSystem.Data.Entity.Edm.EdmAssociationEnd: : 関係 'StudentExam_Student' のロール 'StudentExam_Student_Source' で多重度が無効です。依存ロール プロパティはキー プロパティではないため、依存ロールの多重度の上限は '*' である必要があります。\tSystem.Data.Entity.Edm.EdmAssociationEnd: : 関係 'StudentExam_Exam' のロール 'StudentExam_Exam_Source' で多重度が無効です。依存ロール プロパティはキー プロパティではないため、依存ロールの多重度の上限は '*' である必要があります。
データ注釈を使用してこれを達成する方法はありますか (データ注釈を使用できる場合、流暢な API を使用するのは好きではありません。流暢な API はコードが乱雑になります。