2012-05-10 9 views
2

私は、各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は、基本クラスを継承しませんか?

どのような説明もありがとうございます。

ありがとうございました。

+0

あなたの例では、結合された一意の制約と、結合されたPKを持つのではなく別のPKを作成します。 – Maess

+0

@Maess:データベースの観点からは問題ありませんが、EFが固有の制約をサポートしていない限り、私はそれをしません。 EFはユニーク制約について何も知らず、ユニークさを手動で保証する必要があります。これは、すべてのエンティティに対して単一のキー基本クラスを持つアーキテクチャを保持するだけの解決策になりますが、モデルに複合キーが当然存在する場合、最初はアーキテクチャが間違っています。 – Slauma

+0

@スラマ、それで、あなたは "参加"エンティティの場合、それは単一のIDの主キーと2つの外部キーを持つべきだと言いますか?これに関して全般的なコンセンサスはないようです。 – Kahanu

答えて

1

コンポジットキーでエンティティクラスを使用していない例だけを見たことがあります。そうでなければ、あなたは今直面しているのと同じ問題がありました。

多対多リレーションシップは最良の例ではありません。真の多対多リレーションシップでは、結合テーブルにはモデル内の対応するエンティティがありません。しかし、他の理由でエンティティ内にコンポジット・キーがある場合や、キーが別のタイプ(stringlongGuidなど)を持つ必要があるエンティティを持つこともできます。

この場合、キーはすべてのエンティティで共通のプロパティではないため、基本クラスは使用できません。キーを基底クラスから移動して別の派生クラスに入れることができます - DateCreated,DateModifiedおよびrowversionは共通プロパティです。または、使用しているさまざまなキータイプに対して複数の基本クラスを作成できます。

すべては、すべてのエンティティでサポートする共通のプロパティによって異なります。

+0

この説明をお寄せいただき、ありがとうございました。予想通りでしたが、何か不足しているかどうかはわかりませんでした。複数の基本クラスのシナリオは、私が考えなければならない考えです。ありがとう。 – Kahanu

関連する問題