私は3つのクラスがあります つ以上の検証エラーがモデルの生成中に検出されました: \ tSystem.Data.Entity.Edm.EdmEntityType追加のプロパティを持つ関係マッピングテーブル?
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
スロー::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 :: Multiplicityは、 'StudentExam_Exam'という関係の 'StudentExam_Exam_Source'ロールでは無効です。依存ロールのプロパティはキープロパティではないため、依存ロールの多重度の上限は「*」でなければなりません。
することで、データの注釈でこれをで達成するためにどのような方法は、(私はデータ注釈を使用することができたときに流暢なAPIを使用して好きではありませんあり、流暢なAPIはきたないコードにつながる
私は自分のPOCOをきれいに保ち、後でメタデータを追加します。メタデータを追加することの利益は、独立した検証でもあります(これは流暢でも達成可能ですか?)。とにかく、わかりやすいコードでは、すべての流暢なコードは、個々のエンティティではなく、(そのようなメソッドやその他の実装によって)1つの 'OnModelCreated'メソッドに入ります。私は生成されたエンティティを扱っているので、実際のオープンなPOCOではありません(これはコンストラクタを使ってnavプロパティを初期化します。したがって、部分クラスにctorを書き込むことはできません。 genエンティティを呼び出します。 – Shimmy