Entity Framework如何管理数据库连接?

时间:2012-09-05 05:56:07

标签: c# asp.net-mvc entity-framework

假设以下是我们的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.NET MVC项目中的Controller:

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类的每个实例中只有一个与数据库的连接:

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;
    }
}

1 个答案:

答案 0 :(得分:5)

实体框架管理连接池,这意味着EF将尽可能重用连接,并在需要时仅创建新连接。每个呼叫是否创建新连接取决于许多因素。因此,很难说任何给定的一组调用是否会创建新的连接。

一般来说,EF在管理连接方面做得非常好,除非你知道这是一个问题,否则你不应该担心它。