什么时候需要配置数据库连接

时间:2013-06-03 20:33:40

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

我有一个类,其中包含为我的MVC应用程序定制的几种常用方法,我在几个地方使用。以下是一些例子:

    private MyEntities db = new MyEntities();


    public List<SelectListItem> GetLocationList()
    {
        var query =
                db.v_LocationsAlphabetical.OrderByDescending(x => x.Category).ThenBy(x => x.LocationName).ToList()
                .Select(x => new SelectListItem
                {
                    Value = x.LocationID.ToString(),
                    Text = x.LocationName
                });

        return (query).ToList();
    }

    public IEnumerable<SelectListItem> GetStates()
    {
        var query = db.States.Select(x => new SelectListItem
        {
            Value = x.Abbr,
            Text = x.Name
        });

        return(query);
    }

    public List<Person> GetPeople()
    {
        var query = db.Person.OrderBy(m => m.LastName).ThenBy(m => m.FirstName).ToList();

        return (query);

    }

这些方法中的每一个都调用数据库来获取数据,我想知道是否需要为每个方法添加一个dispose。如果没有,为什么?感谢。

3 个答案:

答案 0 :(得分:6)

您不应该在每个方法中调用dispose,因为db的生命周期与封闭类的生命周期相同,因为它不是方法中的局部变量。

处理此问题的典型方法是制作当前的班级IDisposable并在db.Dispose()方法中调用Dispose()

答案 1 :(得分:0)

没有。除非您自己手动管理连接,否则不必手动处理DbContexts。因此,处理它们通常是可选的。

答案 2 :(得分:0)

在.NET中有多种处理数据库连接的方法 我最喜欢的一个叫one dbcontext per request,它基本上意味着你在需要时初始化dbcontext,不考虑实例化或处理就完成工作,并在请求完成后自动处理。 (有点UnitOfWork-ish)

我已经展示了这种方法here。它不仅适用于EF,也适用于Linq2SQL,ADO.NET等。