2

各 POCO クラスが基本エンティティ クラスを継承するか、IEntity インターフェイスを実装する多くの 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
}

これは、すべてのクラスに 1 つの Primary Key プロパティが含まれている場合は問題ありませんが、多対多の関係がある場合はどうなりますか? 通常、多対多の関係では、エンティティには、このエンティティの主キーを表す二重のプロパティがあります。

そのような:

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

説明をいただければ幸いです。

ありがとう。

4

1 に答える 1

1

複合キーを持つエンティティ クラスを使用しない例だけを見たことがあるかもしれません。そうでなければ、彼らはあなたが今直面しているのと同じ問題を抱えていました.

真の多対多の関係では、モデル内に結合テーブルに対応するエンティティがないため、多対多の関係は最良の例ではありません。ただし、他の理由でエンティティに複合キーがある場合や、キーに別の型 ( stringlongGuidまたはその他) が必要なだけのエンティティがある場合があります。

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

それはすべて、すべてのエンティティでサポートする共通プロパティに依存します。

于 2012-05-10T18:05:06.760 に答える