gpt4 book ai didi

c# - Entity Framework 延迟加载的私有(private)支持字段

转载 作者:太空狗 更新时间:2023-10-30 00:53:55 24 4
gpt4 key购买 nike

我正在使用启用延迟加载的 Entity Framework 5。我有以下代码:

    private ICollection<Subscription> _subscriptions = new Collection<Subscription>();

public virtual ICollection<Subscription> Subscriptions
{
get { return _subscriptions; }
set { _subscriptions = value; }
}

但这有意义吗?我想确保公共(public)属性 Subscriptions 永远不会为 null。由于虚拟 Entity Framework 覆盖了 getter 和 setter 以提供延迟加载功能。

我是否需要这个字段,或者我是否可以只使用一个自动属性,如果没有订阅,我会得到一个空列表?

最佳答案

如果对象是通过 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; }
}

此 Code Pattern 适用于 EF,并且无论对象是使用 new 实例化还是使用不运行对象初始化代码的序列化程序都适用。

get 也可以使用空合并运算符编写得更紧凑:

    get 
{
return _subscriptions ?? (_subscriptions =
new Collection<Subscription>());
}

关于c# - Entity Framework 延迟加载的私有(private)支持字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14732945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com