Entity Frameworkを使わずにDapperだけでなんとかするために色々と工夫をしている。
突然なんの話をしているかといえば、C#。
かなりたくさんの人が触る想定のコードのベース部分を作っているので、using忘れるとバグるとか、接続文字列を環境変数から毎回取得しないといけないとか、そういうことはやりたくない。
決まったクラスの決まったメソッドを呼べば良くて、内容だけ関数を渡すような実装にしたい。
public static List<Identity> Insert(Func<SqlConnection, SqlTransaction, List<dynamic>> queryFunc)
{
using var connection = new SqlConnection
{
ConnectionString = connectionString
};
connection.Open();
var transaction = connection.BeginTransaction();
try
{
var results = queryFunc(connection, transaction);
var resultsIds = results.Select(x => new Identity(x.id)).ToList();
transaction.Commit();
return resultsIds;
}
catch (Exception)
{
transaction.Rollback();
throw;
}
}
で、なんか結局こんな感じになった。
いや、EntityFramework使わせてくれればこんなことしなくて良いんだけど…。