.net - EntityFramework 集合属性是否需要 setter

标签 .net entity-framework setter navigation-properties

使用 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;
    }
  }

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

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

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

编辑意外我只注意到这个related question就在我的postin之后,所以也许它只是一个重复的......

最佳答案

Entity Framework 可以处理私有(private)成员。您可以为该属性提供一个私有(private) setter :

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

你甚至可以完全省略 setter。

关于.net - EntityFramework 集合属性是否需要 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14710355/

相关文章:

c# - 跳过并取 : An efficient approach to OFFSET LIMIT in EF 4. 1?

对象的 Javascript getter 和 setter,而不是对象属性

javascript - 调用 window.Element.prototype.className 时调用 getter

c# - 如何在紧凑的框架中记录操作?

entity-framework - 从 DbGeography 点的集合创建 DbGeography 多边形

c# - ComboBox在下拉时如何捕获鼠标?

c# - 将 SQL 转换为 C# Entity Framework Linq

Grails:如何在 GORM 中设置域类属性时执行操作

c# - 使用 .Net 的 StatisticFormula 库

c# - C#中不同out类型的动态参数列表