4

遅延読み込みを有効にして Entity Framework 5 を使用しています。私は次のコードを持っています:

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

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

しかし、これは理にかなっていますか?Subscriptionspublic プロパティが null にならないようにしたい。仮想エンティティ フレームワークにより、ゲッターとセッターがオーバーライドされ、遅延読み込み機能が提供されます。

このフィールドは必要ですか?それとも自動プロパティを使用して、サブスクリプションがない場合に空のリストを取得できますか?

4

1 に答える 1

6

オブジェクトがnewキーワードを介して構築されている場合、コードは機能します。ただし、多くのシリアライザーは、オブジェクト コンストラクターとフィールド初期化子が機能しないように機能することに注意してください。

そのため、次のパターンに落ち着きました。

private ICollection<Subscription> _subscriptions;

public virtual ICollection<Subscription> Subscriptions
{
    get 
    {   
        if (_subscriptions == null) _subscriptions = 
            new Collection<Subscription>();

        return _subscriptions; 
    }
    set { _subscriptions = value; }
}

このコード パターンは EF で機能し、オブジェクトがnewでインスタンス化されているか、オブジェクトの初期化コードを実行しないシリアライザーでインスタンス化されているかに関係なく機能します。

getは、null 合体演算子を使用してよりコンパクトに記述することもできます。

    get 
    {   
        return _subscriptions ?? (_subscriptions = 
            new Collection<Subscription>()); 
    }
于 2013-02-06T15:45:20.693 に答える