使用和公共对象之间的最佳方法?

时间:2013-07-22 11:59:45

标签: c# asp.net

我想知道使用语句和创建公共变量之间的最佳方法是什么。 我的例子如下: 我有一个继承自一次性的经理类,这个类可以访问我的dbcontext和方法。 我现在正在做的是在我的cs类上对该类进行操作,并根据我的需要创建和销毁我的对象。 例如:

public class StudentManager:  IDisposable
{
    private ISchoolUnitOfWork _unitOfWork;

    public StudentManager()
    {
        _unitOfWork = new SchoolUnitOfWork();
    }

    public IEnumerable<Student> GetStudents()
}

在我的cs课上我做了:

private IEnumerable<Stundets> GetStudents()
{
    using (StudentManager manager = new StudentManager())
    {
         return = manager.GetStudents();
    }
}

OR

private StudentManager = new Studentmanager();

最好的方法是:拥有我的StudentManager实例(只是创建连接并在离开页面时销毁)或使用using

我对此感到有点困惑。提前谢谢!

我在同一个管理器上更新我的上下文,在我的上下文中调用save,这是我工作单元的接口,我不直接访问上下文,但是当我构造它时,我构造了一个类型我的工作单元

我确实节省了对经理的粗暴操作。所以我的经理在更新,插入,修改时调用了save方法,例如:

public class StudentManager....

        public Student UpdateStudent(Student student)
        {
            IStudentService service = new StudentService(_unitOfWork.StudentRepository);
            Student student= service.Update(student);
            _unitOfWork.Save();
            return student;
        }

一般来说,我有一个接口IUnitOfWork和一个UnitOfWork,还有一个IRepository和一个存储库。我只是使用一个管理器来直接实例化我的UnitOfWork,但是有一个管理员......我认为这是合法且有用的!

2 个答案:

答案 0 :(得分:1)

最好的方法是using语句,因为它会自动调用Dispose。您可以保证您的处置逻辑将会发生。事实上,这也是您应该如何使用SqlConnectionSqlCommand之类的对象。所以你正在使用using

事实上,您声明您使用DbContext来访问数据。这些应该按需实例化并包含在using中。无需共享这些类型的实例,因为连接池是通过连接字符串在 完成的。

答案 1 :(得分:0)

如果您使用,那么可能是单一的,您需要多次编写类似的东西。例如

//To get all students
private IEnumerable<Stundets> GetStudents()
{
using (StudentManager manager = new StudentManager())
{
    return = manager.GetStudents();
}
}

//To save Students
//To get all students
private IEnumerable<Stundets> SaveStudents()
{
using (StudentManager manager = new StudentManager())
{
    return = manager.Save();
}
}

等等。但在这里你不必担心处理对象。它将自动处理。如果您要进行全局声明,则需要手动完成。所以我需要说的是,如果你必须在整个页面上使用StudentManager,为什么不把它全局化并在所需的地方使用它,使用两者。这样的事情

private StudentManager manager;

//To get all students
private IEnumerable<Stundets> GetStudents()
{
using (manager = new StudentManager())
{
    return = manager.GetStudents();
}
}

//To save Students
//To get all students
private IEnumerable<Stundets> SaveStudents()
{
using (manager = new StudentManager())
{
    return = manager.Save();
}
}