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使わせてくれればこんなことしなくて良いんだけど…。