2

以下が私たちのBusinessLayerであると仮定します。

public class DatabaseInteract
{
    //`NewsEntities` is our ObjectContext
    public List<News> GetAllNews()
    {
         return new NewsEntities().News.OrderByDescending(q => q.RegidtrationDate).ToList();
    }

    public News GetNewsById(int newsId)
    {
         return new NewsEntities().News.FirstOrDefault(q => q.Id== newsId);
    }

    public bool IsNewsExist(int newsId)
    {
         var news = new NewsEntities().News.FirstOrDefault(q => q.Id== newsId);
         return news != null;
     }
}

そして、以下はASP.NETMVCプロジェクトのコントローラーです。

public ActionResult Index(int? id)
{
    DatabaseInteract databaseInteract = new DatabaseInteract();
    ViewBag.AllNews = databaseInteract.GetAllNews(id.Value);
    ViewBag.News = databaseInteract.GetNewsById(id.Value);
    ViewBag.IsExist = databaseInteract.IsNewsExist(id.Value);
    return View(model);
}

さて、私の質問は次のとおり
です。各ビジネスレイヤーのメソッドを呼び出すときに、データベースへの新しい接続がありますか?

編集 :

DatabaseInteract次のコードは、クラスの各インスタンスでデータベースへの接続が1つしかないことを確信するのに役立ちますか?

public class DatabaseInteract 
{
    readonly NewsEntities _entities = new NewsEntities();

    //`NewsEntities` is our ObjectContext
    public List<News> GetAllNews()
    {
         return _entities.News.OrderByDescending(q => q.RegidtrationDate).ToList();
    }

    public News GetNewsById(int newsId)
    {
         return _entities.News.FirstOrDefault(q => q.Id== newsId);
    }

    public bool IsNewsExist(int newsId)
    {
         var news = _entities.News.FirstOrDefault(q => q.Id== newsId);
         return news != null;
    }
}
4

1 に答える 1

6

Entity Frameworkは接続プールを管理します。つまり、EFは可能な場合は接続を再利用し、必要な場合にのみ新しい接続を作成します。各呼び出しが新しい接続を作成するかどうかは、多くの要因に依存します。したがって、特定の一連の呼び出しが新しい接続を作成するかどうかを判断するのは困難です。

一般に、EFは接続の管理に非常に優れており、問題であることがわかっていない限り、心配する必要はありません。

于 2012-09-05T06:04:55.460 に答える