5

EntityFramwork (Code First) で 1-n 関係をモデル化するための通常のアプローチは、次のような仮想コレクション プロパティを使用することです。

class Project {
  public virtual ICollection<Remark> Remarks { get; set; }
}

class Remark {
  public virtual int ProjectId { get; set; }
  public virtual Project Project {get; set; }
}

Remarksコレクションは初期なのでnull、次のアプローチを取ります

  private ICollection<Remark> _remarks;
  public virtual ICollection<Remark> {
    get {
      if (_remarks == null)
        _remarks = new List<Remark>();
      return _remark;
    }
    set {
       _remarks = value;
    }
  }

プロパティを明示的に設定する必要なく、Remarks.Add新しく作成されたオブジェクトでメソッドを使用するため。Project

Afaik EF は私のクラスから内部的に派生し、遅延読み込みをサポートするために仮想ナビゲーション プロパティを上書きします。

私の質問:コレクション プロパティのセッターを定義する必要がありますか? EFはそれを必要としますか? ゲッターのみを公開し、クラスが内部でコレクションを管理できるようにしたいと考えています。

編集偶然にも、この関連する質問に気付いたのは、私の投稿の直後だけだったので、重複しているだけかもしれません...

4

2 に答える 2

8

エンティティ フレームワークはプライベート メンバーを処理できます。プロパティにプライベート セッターを与えることができます。

private ICollection<Remark> _remarks;
public virtual ICollection<Remark> Remarks
{
    get { return _remarks ?? (_remarks = new HashSet<Remark>()); }
    private set { _remarks = value; }
}

セッターを完全に省略することもできます。

于 2013-02-05T18:21:24.667 に答える