使用IDisposable导致错误:"非静态字段,方法或属性需要对象引用"

时间:2014-12-14 18:41:35

标签: c# entity-framework dispose

此错误消息通常表示正在从静态方法访问实例属性。但就我而言,这些方法都不是静态的。如果我删除":IDisposable"和Dispose方法,错误消息消失。但是,当我使用DbOps对象时,我希望能够清理数据库资源。为什么会出现此错误?

using System.Data.Entity;

namespace DbAccess
{
    class DbAccess
    {
        public void PerformSomeWork()
        {
            using (DbOps dbOperations = new DbOps())
            {
                List<Person> people = DbOps.GetPeople();
                // ... other database access
            }

        }
    }

    class DbOps : IDisposable
    {
        CustomerContext customerContext;

        public DbOps()
        {
            customerContext = new CustomerContext();
        }

        public void Dispose()
        {
            customerContext.Dispose();
        }

        public List<Person> GetPeople()
        {
            return customerContext.People.ToList();
            // return new List<Category>();
        }

        // other database operations
    }

    class CustomerContext : DbContext
    {
        public DbSet<Person> People { get; set; }
        // other DbSets
    }

    class Person
    {
        string name;
    }

}

1 个答案:

答案 0 :(得分:4)

似乎

using (DbOps dbOperations = new DbOps())
{
    List<Person> people = DbOps.GetPeople();
}

应该是

using (DbOps dbOperations = new DbOps())
{
    List<Person> people = dbOperations.GetPeople();
}

IDisposable似乎并不相关,但我想当你删除IDisposable时你也会更改这些行,因为你没有Dispose就可以使用。