6

我想知道使用语句和创建公共变量之间的最佳方法是什么。我的例子如下:我有一个继承自一次性的管理器类,并且这个类可以访问我的 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();
    }
}

或者

private StudentManager = new Studentmanager();

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

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

我确实在同一个管理器上更新了我的上下文,在我的上下文中调用了 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,而是使用管理器...我认为这是合法且有用的!

4

2 回答 2

1

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

事实上,您说您正在使用 aDbContext来访问数据。这些应该按需实例化并包装在 ausing中。无需共享这些类型的类的实例,因为连接池是通过连接字符串在 SQL Server上完成的。

于 2013-07-22T12:04:11.603 回答
0

如果你使用 using then 可能是在一个单一的,你需要多次编写类似的东西。例如

//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();
}
}
于 2013-07-22T12:08:37.757 回答