首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >实体框架延迟加载的私有支持字段

实体框架延迟加载的私有支持字段
EN

Stack Overflow用户
提问于 2013-02-06 23:43:11
回答 1查看 3.1K关注 0票数 4

我使用的是Entity Framework5,启用了延迟加载。我得到了以下代码:

代码语言:javascript
代码运行次数:0
运行
复制
    private ICollection<Subscription> _subscriptions = new Collection<Subscription>();

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

但这有意义吗?我希望确保公共属性Subscriptions永远不为空。由于虚拟实体框架覆盖了getter和setter来提供延迟加载功能。

我需要这个字段吗?或者,如果没有订阅,我可以只使用auto属性并得到一个空列表吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-06 23:45:21

如果对象是通过new关键字构造的,那么您的代码将正常工作。但是请注意,many serializers function such that object constructors and field initializers do not work

出于这个原因,我决定采用以下模式:

代码语言:javascript
代码运行次数:0
运行
复制
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:

代码语言:javascript
代码运行次数:0
运行
复制
    get 
    {   
        return _subscriptions ?? (_subscriptions = 
            new Collection<Subscription>()); 
    }
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14732945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档