使用 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/