3

我有一个类,其中包含一些为在我的 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。如果不是,为什么?谢谢。

4

3 回答 3

6

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

处理此问题的典型方法是创建当前类IDisposable并调用方法db.Dispose()Dispose()

于 2013-06-03T20:39:34.683 回答
0

在 .NET 中有多种处理 db 连接的方法
我最喜欢的方法之一是调用one dbcontext per request,这基本上意味着您在需要时初始化 dbcontext,无需考虑实例化或处置即可完成工作,并在请求完成时自动处置。(有点像UnitOfWork-ish)

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

于 2013-06-03T21:01:16.043 回答
0

不需要。不必手动处置 DbContext,除非您自己手动管理连接。因此,处置它们通常是可选的。

于 2013-06-03T20:35:01.927 回答