はじめに
こんな感じの SQL を書いて、、、
select
*
from
persons
where
true = true
--# if (@name is not null) {
and name like /*@name*/
--# }
--# if (@age is not null) {
and age = /*@age*/
--# }
;
こんな感じのインターフェースを書いたら、、、
[Dao]
public interface IPersonDao
{
List<Person> Search(string? name, int? age);
}
こんな感じで実行できます。
List<Person> persons = personDao.Search(name, age);
というライブラリを開発しています。
名前を NDao と言い、個人で開発しているアプリケーションのために作りました。
需要があるかは分かりませんが、一人だけで使うのも変な気がしてきましたので、一般公開する事にしました。
よろしければお試しください。
NDao とは
NDao は Dao (Data Access Object) を生成して実行するライブラリです。
ユーザーは Dao インターフェースを通してデータベースを操作しますが、その実装を作成する必要はありません。
NDao が Dao の実装を提供します。
どういう仕組みかと言いますと、Roslyn の Source Generator を使って、SQL を実行するのに必要な処理を自動生成しているわけです。
実行時に SQL ファイルを読み取るのではなく、ビルド時に読み取って C# のソースコードを生成していますので、パフォーマンスも有利ですし、エラーをビルド時に発見する事もできます。
誰でも思いつくような仕組みですが、意外とそういった製品は見つからず、自分で開発する事にしました。
特徴
NDao は下記の特徴を持っています。
- SQL ファイルを簡単に実行する仕組みを提供
- SQL ファイルに C# コードを埋め込む事が可能
- 動的な SQL を作成する事が可能
- 2 Way SQL を作成する事が可能
- ビルド時に SQL 内の C# コードやパラメーターを簡易的にチェックする事が可能
- CRUD 用の API を提供
- SQL のロギングを提供
- EF Core のマイグレーション機能と併用する事が可能
「EF Core でマイグレーションはしたいけど SQL は自分で書きたい」という方や、「2 Way SQL やりたいよ」という方には興味を持って頂けると思います。
まだ実績がないので、おもちゃにしか見られないかもしれませんが、これから自分の開発で実務に耐えられるような製品に育てていきたいと思います。
参考
ドキュメント
詳しくは下記のリポジトリにまとめていくつもりですが、もう少し気楽に読める記事があっても良いかと思いましたので、それは Qiita 様の方に少しずつ投稿させて頂こうと思います。
サンプル
サンプルプログラムも下記のリポジトリにありますので、よろしければお試しください。
データベースには SQLite を使用しており、設定なしですぐに実行できます。
以上でございます。