3

DapperORMのリポジトリメソッドを以下に作成しました。

public SqlMapper.GridReader QueryMultiple(string query, object cmdParams = null, CommandType cmdType = CommandType.Text)
{
     SqlMapper.GridReader objMulti;
     var conn = GetSqlConnection();            
     objMulti = conn.QueryMultiple(query, cmdParams, commandTimeout: 0, commandType: cmdType);                                            
     return objMulti;
}

public IEnumerable<T> GetAll<T>(string query, object cmdParams = null, CommandType cmdType = CommandType.Text) where T : class
{
      IEnumerable<T> objList;
      using (var conn = GetSqlConnection())
      {
           objList = conn.Query<T>(query, param: cmdParams, commandTimeout:0, commandType: cmdType);
           conn.Close();
      }
      return objList;
}

queryメソッドの使用法は問題ないように見え、操作が完了するとすぐに接続が閉じられます。

new DapperRepository().Query("zyx").ToList();

ただし、querymultipleはgridreaderを返します。したがって、読み取り操作が実行された後、Dapperは接続とリーダーの両方を破棄しますか?私のアプローチについて教えてください。

using (SqlMapper.GridReader multiResult = new DapperRepository().QueryMultiple(sql, new { id = id }))
{
   var dbPRTGroup = multiResult.Read<Customer>().Single();
    XXXXX
}
4

1 に答える 1

0

はい、そうです。

最後のコードブロックによると、接続操作とリーダー操作の両方が最後に破棄されます。これは、.NETFrameworkでusingキーワードを使用することによっても保証されます。

于 2012-09-20T20:05:38.587 に答える