我使用的是Entity Framework5,启用了延迟加载。我得到了以下代码:
private ICollection<Subscription> _subscriptions = new Collection<Subscription>();
public virtual ICollection<Subscription> Subscriptions
{
get { return _subscriptions; }
set { _subscriptions = value; }
}
但这有意义吗?我希望确保公共属性Subscriptions
永远不为空。由于虚拟实体框架覆盖了getter和setter来提供延迟加载功能。
我需要这个字段吗?或者,如果没有订阅,我可以只使用auto属性并得到一个空列表吗?
发布于 2013-02-06 15:45:21
如果对象是通过new关键字构造的,那么您的代码将正常工作。但是请注意,many serializers function such that object constructors and field initializers do not work。
出于这个原因,我决定采用以下模式:
private ICollection<Subscription> _subscriptions;
public virtual ICollection<Subscription> Subscriptions
{
get
{
if (_subscriptions == null) _subscriptions =
new Collection<Subscription>();
return _subscriptions;
}
set { _subscriptions = value; }
}
此代码模式适用于EF,并且无论对象是使用new实例化还是使用不运行对象初始化代码的序列化程序实例化都有效。
使用null-coalescing操作符也可以更简洁地编写get:
get
{
return _subscriptions ?? (_subscriptions =
new Collection<Subscription>());
}
https://stackoverflow.com/questions/14732945
复制