私は、各POCOクラスがベースのEntityクラスを継承するか、IEntityインターフェイスを実装する多くのEF POCOの例を見てきました。なぜEFリポジトリパターンでPOCOのベースクラスを使用するのですか?
これはなぜ使用されているのか理解していますが、何か不足していない限り、すべての状況で機能することはわかりません。
エンティティの基底クラスは次のようになります。
public class Entity
{
#region Primitive Properties
[Key]
public int Id { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateModified { get; set; }
[Timestamp]
public byte[] rowversion { get; set; }
#endregion
}
を...とコンクリートPOCOクラスは次のようになります。
public class BlogCategory : Entity
{
#region Properties
[Required(ErrorMessage = "Category Name is required.")]
public string CategoryName { get; set; }
public virtual ICollection<Blog> BlogList { get; set; }
#endregion
}
すべての私のクラスは単一が含まれている場合、これは問題ありプライマリキーのプロパティですが、多対多の関係があるとどうなりますか?通常、多対多の関係では、エンティティは、このエンティティの主キーを表す二重のプロパティを持ちます。
のような:
public class ClaimQuestionAnswer : Entity <-- this will not work, will it?
{
[Key]
public int QuestionId { get; set; }
[Key]
public int AnswerId { get; set; }
public string Answer { get; set; }
public byte[] rowversion { get; set; }
}
は、この特定のPOCOは、基本クラスを継承しませんか?
どのような説明もありがとうございます。
ありがとうございました。
あなたの例では、結合された一意の制約と、結合されたPKを持つのではなく別のPKを作成します。 – Maess
@Maess:データベースの観点からは問題ありませんが、EFが固有の制約をサポートしていない限り、私はそれをしません。 EFはユニーク制約について何も知らず、ユニークさを手動で保証する必要があります。これは、すべてのエンティティに対して単一のキー基本クラスを持つアーキテクチャを保持するだけの解決策になりますが、モデルに複合キーが当然存在する場合、最初はアーキテクチャが間違っています。 – Slauma
@スラマ、それで、あなたは "参加"エンティティの場合、それは単一のIDの主キーと2つの外部キーを持つべきだと言いますか?これに関して全般的なコンセンサスはないようです。 – Kahanu