0

以下のOrderオブジェクトを Entity Framework エンティティと見なします。

Orderdownのインスタンスを にキャストし、 のプロパティにIOrderアクセスすると、仮想プロパティがデータベースからすべてのエンティティを列挙してロードし、メモリ内の OrderLine エンティティのデータが格納されたコレクションを返すことになりますか?LinesIOrderOrderLinesOrderLine

それとも、クライアント コードは OrderLines コレクションへの参照を取得するだけで、foreach などで実際に列挙されると、データベースからエンティティが読み込まれますか?

    public interface IOrder
    {
        IEnumerable<OrderLine> Lines { get; }
    }

    public class Order : IOrder
    {
        public int OrderId { get; set; }



        public IEnumerable<OrderLine> Lines
        {
            get
            {
                return OrderLines;
            }
        }

        public virtual ICollection<OrderLine> OrderLines { get; set; }

        public Order()
        {
            OrderLines = new List<OrderLine>();
        }
    }
4

1 に答える 1

0

オブジェクトへの参照を返しOrderLinesますが、 として公開されIEnumerableます。つまり、クライアント コードの列挙のみが実際にコレクションを列挙します。これはコレクション全体です。linq フィルター ( Where) とプロジェクション ( Select) は SQL に変換されません。

これらのどちらも必要ない場合があることに注意してください。1 つ目は、遅延読み込みを可能にするためにコンテキストが有効である必要があり、2 つ目は、コレクションが「大きい」可能性があることです (ただし、注文明細があることはおそらく重要ではありません)。アプリケーションのタイプによっては、事前設定された OrderDto オブジェクトをクライアントに転送する方がよい場合があります。

于 2013-01-14T18:50:37.307 に答える