1

エンティティヘルパークラスをコーディングしましたが、通常はそのようなものを使用します

  private CVSystemEntities db;

public EntityHelper()
    {

        db = new CVSystemEntities();
   }

   public IQueryable<Members> GetMembersForRole(Role role)
    {
        if (!RoleExists(role))
            throw new ArgumentException(MissingRole);

        return db.Members.Where(m => m.RoleID == role.Id).OrderBy(m=>m.Name).AsQueryable();
    }

大丈夫ですが、そのようなものを使用する場合

  private CVSystemEntities db;
  private IQueryable<Members> membersDb;


public EntityHelper()
    {

        db = new CVSystemEntities();
        membersDb = db.Members.Select(s => s);
   }

   public IQueryable<Members> GetMembersForRole(Role role)
    {
        if (!RoleExists(role))
            throw new ArgumentException(MissingRole);

        return membersDb.Where(m => m.RoleID == role.Id).OrderBy(m=>m.Name).AsQueryable();
    }

db.members の代わりに membersClass を使用しました。代わりに db.members を作成しました。

それで、あなたはこの方法についてどう思いますか?私はこれのいくつかを使用する必要がありますか?なぜそれを使いたいのかと聞かれると、自分のデータベースにあまりクエリをしないと思うのですが、そのほうがいいのでしょうか?

4

1 に答える 1

3

私はこれのいくつかを使用する必要がありますか?なぜそれを使いたいのかと聞かれれば、自分のデータベースにあまりクエリをしないと思うのですが、そのほうがいいのでしょうか?

いいえ、データベースでまったく同じ量の作業を行っています。これ:

membersDb = db.Members.Select(s => s);

...データベースでクエリを実行せず、結果を保持します。期待どおりです。代わりに、クエリを効果的に作成しますが、後で使用できるようにクエリを保持します。

次のように変更した場合:

IEnumerable<Members> membersDb;
...
membersDb = db.Members.ToList();

その場合、データベースが 1 回ヒットするだけですが、もちろん、データベースが変更された場合は古いデータが取得されます。多分それは大丈夫です-あなたの寿命が何であるかは不明EntityHelperです-しかし、私にはそうは思えません。を呼び出すと、データベースからすべてToListのメンバーもフェッチされることに注意してください。それ以外の場合、クエリには適切な句があり、フェッチされるものを制限します。テーブルが本当に小さい場合を除き、テーブル全体をメモリにフェッチしたくないでしょう。Where

于 2012-12-18T11:07:25.017 に答える