NPocoの紹介 -機能編- Databaseクラス
最初の記事はこちら
今回は Database
クラスについての紹介です。
NPocoのバージョンは 4.0.2
です。
現時点のコードはこちら
コンストラクタについて
複数のコンストラクタが用意されています。
public Database(DbConnection connection);
public Database(DbConnection connection, DatabaseType dbType);
public Database(DbConnection connection, DatabaseType dbType, IsolationLevel? isolationLevel);
public Database(string connectionString, DatabaseType databaseType, DbProviderFactory provider);
public Database(DbConnection connection, DatabaseType dbType, IsolationLevel? isolationLevel, bool enableAutoSelect);
public Database(string connectionString, DatabaseType databaseType, DbProviderFactory provider, IsolationLevel? isolationLevel = null, bool enableAutoSelect = true);
大きく分けると
-
DbConnection
を渡してコネクションを生成する方法(IDbConnection
ではない) - 接続文字列と
DbProviderFactory
を渡して生成する方法
が存在します。これらはどちらを採用するかによってコネクションに管理方法が異なるようです。
(私もDbConnection
を使用する方法しか使ったことないので詳細は控えます。)
その他オプションとしては DatabaseType
, IsolationLevel
, enableAutoSelect
があります。
私は DbConnection
と DatabaseType
を渡すタイプのものをよく使用します。
DatabaseType
これはデータベースベンダー毎のクエリの方言を吸収するものです。
このクラス自体は抽象クラスであり、各ベンダー毎の実装クラスが存在します。
明示的に指定しなかった場合は DatabaseType.Resolve
メソッドにより DbConnection
のクラス名に応じた型が自動的に選択されます。
既存の DatabaseType
の挙動をカスタマイズしたい場合は、自前のDatabaseType
を作成し、Database
のコンストラクタに渡すとよいでしょう
IsolationLevel
トランザクション分離レベルです。
明示的に指定しなかった場合は DatabaseType.GetDefaultTransactionIsolationLevel
メソッドの値が使用されます。 ぱっと見た感じMySQL
がRepeatableRead
でそれ以外がReadCommitted
になっています。
enableAutoSelect
Fetch
メソッドなどで select
など以外から始まる名前クエリを記述した際に
select 列リスト from テーブル名
を自動でつけてくれるオプションです。
メソッドについて
自動クエリ系
生クエリを書くことなく、自動でクエリ生成をしてくれるものです。
変更操作
Insert
Update
Delete
DeleteMany
これらは 属性を付与したクラスのインスタンスを渡すだけで、自動でクエリを実行してくれます。
参照操作
Query
こちらのQuery
は正確にはジェネリクスのついたQuery<T>
です。
Hoge hoge = database.Query<Hoge>()
.Where(x => x.Key1 = "001")
.SingleOrDefault();
といった感じに記述することができます。
手動クエリ系
手動でクエリを記述するものです。
変更操作
Execute
ExecuteScalar
参照操作
Single
SingleOrDefault
First
FirstOrDefault
Fetch
Query
こちらの Query
はyield return
で1件ずつ返すものです。
トランザクション制御
-
BeginTransaction
-
AbortTransaction
-
CompleteTransaction
-
GetTransaction
←これはゲッターではなくトランザクションのスコープを作るメソッド -
SetTransaction
←これは上記のGetTransaction
に対するセッターではない
詳細はこちら
私はDatabase
の外側で DbConnection.BeginTransaction()
したものをSetTransaction
でセットする方法でトランザクション管理しています。
その他
FormatCommand
DbCommand
からSQL
とパラメータ
を表す文字列を取得します。
私は後述のInterceptor
でクエリのログを出力するために利用しています。
StartSnapshot
こちらはSnapshotter
クラスで拡張メソッドとして定義されています。
Update
を実行するときに変更対象列を特定するために使います。
使い方はこちら
プロパティについて
Interceptors
クエリの実行前後に処理を挟む際に使うインターセプターです。
終わりに
ここで紹介したもの以外のメソッドやプロパティも用意されています。