53

したがって、私の EF モデルには関係があり、例で見たものによると、それらの関係は ICollection の仮想プロパティで行う必要があります。

例:

 public class Task
    {
        public int Id { get; set; }
        public string Description { get; set; }
        public virtual ICollection<SubTask>  { get; set; }
    }

遅延実行を防ぐために IEnumerable を使用する必要があることをどこかで読みましたが、それは正しいですか? これは、DAL メソッドが IQueryable のままの IEnumerable を返す場合、Web ページで .TOList を呼び出した時点ではなく、その時点で SQL が実行されることを意味します。

それで、ベストプラクティスは何ですか?何を返せばいいですか?IEnumerable、List?、IList、ICollection?

どうも

4

2 に答える 2

73

IQueryable:

  • おそらく a.ToList()またはforeach. つまり、 のようなフィルタを引き続き追加できますWhere()
  • IEnumerable を拡張します

IEnumerable:

  • 項目の転送専用リスト。アイテム 0 ~ 3 を通過しないと、「アイテム 4」にたどり着けません。
  • 読み取り専用リストです。リストに追加したり、リストから削除したりすることはできません。
  • それでも遅延実行を使用する可能性があります (IQueryable は引き続き IEnumerable です)。

IList:

  • 完全なリストへのランダムアクセス
  • おそらく完全にメモリ内にあります(遅延実行はありませんが、これを実装する正確なクラスを誰が知っていますか?)
  • 追加と削除をサポート
  • IEnumerable と ICollection を拡張します

ICollection:

  • IEnumerable と IList の間です。
  • IEnumerable を拡張します

何が「最適」かは、要件によって異なります。通常、アイテムを表示するだけの場合は、IEnumerable で十分です。少なくとも常にジェネリックバリアントを使用してください。

于 2012-07-03T08:41:50.507 に答える