Mar*_*ner 3 .net setter entity-framework navigation-properties
与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; }
}
Run Code Online (Sandbox Code Playgroud)
由于Remarks
最初的收集null
,我采取以下方法
private ICollection<Remark> _remarks;
public virtual ICollection<Remark> {
get {
if (_remarks == null)
_remarks = new List<Remark>();
return _remark;
}
set {
_remarks = value;
}
}
Run Code Online (Sandbox Code Playgroud)
为了Remarks.Add
在新创建的Project
对象上使用该方法而无需明确设置Property.
Afaik EF内部派生自我的类并覆盖虚拟导航属性以支持延迟加载.
我的问题:我是否需要定义集合属性的setter?EF需要吗?我更愿意只暴露getter并让类在内部管理集合.
编辑 Accidentially我只是在postin mine之后才注意到这个相关的问题,所以也许它只是重复...
实体框架可以处理私有成员.您可以为酒店提供私人安装者:
private ICollection<Remark> _remarks;
public virtual ICollection<Remark> Remarks
{
get { return _remarks ?? (_remarks = new HashSet<Remark>()); }
private set { _remarks = value; }
}
Run Code Online (Sandbox Code Playgroud)
你甚至可以完全省略setter.