LoginSignup
0
1

More than 3 years have passed since last update.

NPocoの紹介 -機能編- Databaseクラス

Last updated at Posted at 2020-06-12

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 があります。

私は DbConnectionDatabaseType を渡すタイプのものをよく使用します。

DatabaseType

これはデータベースベンダー毎のクエリの方言を吸収するものです。
このクラス自体は抽象クラスであり、各ベンダー毎の実装クラスが存在します。

明示的に指定しなかった場合は DatabaseType.Resolve メソッドにより DbConnection のクラス名に応じた型が自動的に選択されます。

既存の DatabaseType の挙動をカスタマイズしたい場合は、自前のDatabaseType を作成し、Database のコンストラクタに渡すとよいでしょう

IsolationLevel

トランザクション分離レベルです。

明示的に指定しなかった場合は DatabaseType.GetDefaultTransactionIsolationLevelメソッドの値が使用されます。 ぱっと見た感じMySQLRepeatableReadでそれ以外が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

こちらの Queryyield return で1件ずつ返すものです。

トランザクション制御

  • BeginTransaction
  • AbortTransaction
  • CompleteTransaction

  • GetTransaction ←これはゲッターではなくトランザクションのスコープを作るメソッド

  • SetTransaction ←これは上記のGetTransaction に対するセッターではない

詳細はこちら

私はDatabase の外側で DbConnection.BeginTransaction() したものをSetTransaction でセットする方法でトランザクション管理しています。

その他

FormatCommand

DbCommand からSQLパラメータ を表す文字列を取得します。

私は後述のInterceptor でクエリのログを出力するために利用しています。

StartSnapshot

こちらはSnapshotter クラスで拡張メソッドとして定義されています。

Update を実行するときに変更対象列を特定するために使います。

使い方はこちら

プロパティについて

Interceptors

クエリの実行前後に処理を挟む際に使うインターセプターです。

終わりに

ここで紹介したもの以外のメソッドやプロパティも用意されています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1