我在Dapper操作下面使用helper类。如果有多个实体要映射到复杂的DTO对象,我会单独检索它并手动附加到属性。
例如:要检索客户,我有一个带有订单和地址属性的Customer类。我知道QueryMultiple方法,但实时我们有不同的查询。
cust.Orders = DapperHelper.ExecList<OrderDTO>(qry1, params1);
cust.Addresses = DapperHelper.ExecList<AddressDTO>(qry2, params2);
我怀疑的是,每次打开子项时都会打开连接,会有任何性能损失。相反,我可以在构造函数中初始化连接并在dispose方法中关闭它,从而为每个请求使用单个连接。
public class DapperHelper
{
private static string _conn = Convert.ToString(ConfigurationManager.ConnectionStrings["dbContext"]);
public static IEnumerable<T> ExecList<T>(string query, object cmdParams = null, CommandType cmdType = CommandType.Text, bool buffered = true)
{
IEnumerable<T> list;
using (IDbConnection _db = new SqlConnection(_conn))
{
list = _db.Query<T>(query, param: cmdParams, commandTimeout: 0, commandType: cmdType, buffered: buffered);
_db.Close();
}
return list;
}
public static T ExecSingleOrDefault<T>(string query, object cmdParams = null, CommandType cmdType = CommandType.Text)
{
T obj;
using (IDbConnection _db = new SqlConnection(_conn))
{
obj = _db.Query<T>(query, param: cmdParams, commandTimeout: 0, commandType: cmdType).SingleOrDefault();
_db.Close();
}
return obj;
}
}
答案 0 :(得分:4)
SQLConnection
automatically默认情况下使用连接池,因此只要正确处理连接,就不必担心网络连接开销。
答案 1 :(得分:1)
如果您知道QueryMultiple,为什么不将两个模型放在一个像
中public class CustomerViewModel
List<Orders> orderList;
List<Address> addresslit;
end class
然后当你调用Dapper.Query
时将其映射为
IEnumerable<CustomrerViewModel> list
这样只需要一个sql连接