概要
LtQuery(リトルクエリ)はEF CoreのようにLINQやInclude()でSQLを構築する機能が備わっていてかつ、パフォーマンスがDapperを凌いでいるといういいとこ取りの高速O/Rマッパー(ORM)です。
それの書き込み処理(Inert/Update/Delete)が完成致しました。
これでようやくv1.0.0です。
使用例
class BlogService
{
readonly ILtConnection _connection;
public BlogService(ILtConnection connection)
{
_connection = connection;
}
// UnitsOfWorkを使用しないパターン
public void AddBlog(Blog blog)
{
_connection.Add(blog); // 即時実行される
}
// UnitsOfWorkを使用するパターン
public void AddBlog2(Blog blog)
{
using (var unitOfWork = _connection.CreateUnitOfWork())
{
unitOfWork.Add(blog);
unitOfWork.Commit(); // まとめて実行される
}
}
}
_connection.Add()
を使用した場合はクエリを即発行します。こちらはトランザクションを自身で管理したい場合に使います。unitOfWork.Add()
は標準の書き込み方です。Commit()時に蓄積したクエリをまとめて発行します。EF Core 同様Add()されたエンティティはIDが付与されます。EF Coreのようなトレース機能はありません。パフォーマンス第一ですのでこれで十分かと思います。
class BlogApplicationService
{
readonly ILtUnitOfWork _unitOfWork;
public BlogApplicationService(ILtUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
ILtUnitOfWork
はDIコンテナにScopedで登録されています。ILtUnitOfWork
は ILtConnection
と同様Select/Single/Firstのメソッドを持っているためわざわざ ILtConnection
と使い分ける必要はなく、上記コードのような使い方もできます。
現状の問題点
書き込み処置のSQLは1件ずつ発行しているためEF Coreより多少遅い問題が発生しています(少数の書き込みなら断然速い)。時期に改善致します。改善しました。- 自動採番(IDENTITY)でない主キーのエンティティの書き込みは対応していません。これも時期に改善致します。
コメント