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?

私はそれについて少し混乱しています。前もって感謝します!

作業単位のインターフェイスであるコンテキストで保存を呼び出す同じマネージャーでコンテキストを更新します。コンテキストに直接アクセスすることはありませんが、コンテキストを構築するときに、1 つのタイプの作業単位を構築します。

私は、マネージャーでの不愉快な操作を節約します。したがって、私のマネージャーでは、更新、挿入、変更時に save メソッドを呼び出します。次に例を示します。

public class StudentManager....

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

一般に、Interface IUnitOfWork と UnitOfWork があり、IRepository とリポジトリもあります。そして、マネージャーを使用して、 UnitOfWork を直接インスタンス化するのではなく、マネージャーを使用して... それは合法で便利だと思います!

4

2 に答える 2

1

usingステートメントはDispose自動的に呼び出されるため、最良の方法です。破棄ロジックが発生することを保証できます。実際、これはSqlConnectionandのようなオブジェクトを使用する方法SqlCommandでもあります。だから、あなたはそれを正しくやっていますusing.

実際、あなたは を使用しDbContextてデータにアクセスしていると述べました。これらはオンデマンドでインスタンス化しusing、同様にラップする必要があります。接続プーリングは接続文字列を介してSQL Server で行われるため、これらのタイプのクラスのインスタンスを共有する必要はありません。

于 2013-07-22T12:04:11.603 に答える
0

using を使用する場合は、同様のものを複数回記述する必要がある単一の可能性があります。例えば

//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 に答える