【问题标题】:Do EntityFramework collection properties need a setterEntityFramework 集合属性是否需要设置器
【发布时间】:2013-02-05 14:54:17
【问题描述】:

使用 EntityFramwork(代码优先)建模 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;
    }
  }

为了在新创建的Project 对象上使用Remarks.Add 方法,而无需显式设置属性。

Afaik EF 内部派生自我的类并覆盖虚拟导航属性以支持延迟加载。

我的问题:我需要定义集合属性的 setter 吗?英孚需要吗?我宁愿只公开 getter 并让类在内部管理集合。

编辑我只是在我的帖子发布后才注意到这个related question,所以它可能只是重复的......

【问题讨论】:

标签: .net entity-framework setter navigation-properties


【解决方案1】:

实体框架可以处理私有成员。你可以给这个属性一个私有的 setter:

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

您甚至可以完全省略 setter。

【讨论】:

    【解决方案2】:

    据我所知,EF Core 也不需要 setter。

    如果您使用延迟加载,则确实需要virtual。否则你也可以省略它。

    【讨论】:

      猜你喜欢
      • 2020-06-24
      • 2010-11-16
      • 1970-01-01
      • 2010-12-30
      • 2018-07-19
      • 2011-05-06
      • 2015-09-20
      • 2011-08-20
      • 1970-01-01
      相关资源
      最近更新 更多