MySQL の C# ラッパー クラスを作成していますが、"new MySqlConnection(connstr)" をコンストラクターに配置して、データベースを操作するメソッド間で同じオブジェクトを使用できるかどうかを知る必要がありますか? すべての操作 (選択、挿入、削除、更新) に対して新しい接続を作成し、完了したら破棄する必要があります。MySQL ラッパーを作成するためのアイデアやより良いアプローチはありますか?
3 に答える
その接続を共有しないことをお勧めします。
必要に応じてプールからその接続を取得し、SQL 操作を実行し、リソースを閉じてから、接続をプールに戻すだけでなく、スケーリングも行いません。
SQL オブジェクトをデータ アクセス層に制限し、可能な限り狭い範囲で使用することがベスト プラクティスだと考えています。それらを周りに渡さないでください - それらをクリーンアップする責任は明確ではありません。
接続は、ユースケース、作業単位、およびトランザクションを認識しているサービスによって所有されている必要があります。接続をチェックアウトし、それを必要とするすべての DAO で使用できるようにしてから、コミットまたはロールバックして接続を閉じます。
DAO にはデータベース接続を与える必要があります。それらがより大きなトランザクションの一部であるかどうかを知ることはできないため、それらを自分で取得するべきではありません。
データベース接続の場合、ルールはできるだけ遅くオープンし、できるだけ早く閉じる必要があります。
したがって、異なるメソッド間で単一の接続オブジェクトを共有するのではなく、クエリを実行する前に接続を開いてから閉じてください。
接続のプーリング、オープン、クローズ、破棄などをすべて行うクラスがありMySqlHelper
ます。「これらは引数として接続文字列を取り、接続プーリングを完全にサポートします。」ただし、Oracle が提供する MySQL コネクタを使用しているだけです。