我正在使用启用了延迟加载的 Entity Framework 5。我有以下代码:
private ICollection<Subscription> _subscriptions = new Collection<Subscription>();
public virtual ICollection<Subscription> Subscriptions
{
get { return _subscriptions; }
set { _subscriptions = value; }
}
但这有意义吗?我想确保公共财产Subscriptions
永远不会为空。由于虚拟实体框架重写了 getter 和 setter 以提供延迟加载功能。
我是否需要此字段,或者我可以只使用自动属性,但如果没有订阅,我会得到一个空列表吗?
如果对象是通过以下方式构造的,您的代码将起作用new关键词。但请注意许多序列化程序的功能使得对象构造函数和字段初始值设定项不起作用 https://stackoverflow.com/q/9419743/141172.
因此,我决定采用以下模式:
private ICollection<Subscription> _subscriptions;
public virtual ICollection<Subscription> Subscriptions
{
get
{
if (_subscriptions == null) _subscriptions =
new Collection<Subscription>();
return _subscriptions;
}
set { _subscriptions = value; }
}
此代码模式与 EF 配合使用,并且无论对象是否实例化都有效new或者使用不运行对象初始化代码的序列化器。
The get还可以使用空合并运算符更紧凑地编写:
get
{
return _subscriptions ?? (_subscriptions =
new Collection<Subscription>());
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)