2
DataReader를 DTO로 변환하는 쉬운 방법을 찾으려고합니다 (열 이름과 같은 속성이 있음). 하지만 어떻게 반사가 performace에 영향을 미칠지 궁금하네요 아마 어쩌면 더 쉽고/깨끗한 방법으로 그것을 할 수 있습니다.DataReader를 DTO/List <DTO>으로 올바르게 변환하는 방법은 무엇입니까?
나는보고 있었으나 괜찮은 해결책을 찾지 못했습니다 (중복 된 질문에서도).
는 여기를 효율적으로이 작업을 수행하려면 "숙제"
public static T ConvertSPToDTO<T>(string procName, List<SqlParameter> parameters) where T : new()
{
T t = new T();
SqlDataReader rs = null;
try
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(procName, conn))
{
foreach (SqlParameter param in parameters)
{
cmd.Parameters.Add(param);
}
cmd.CommandType = CommandType.StoredProcedure;
rs = cmd.ExecuteReader();
List<string> columns = Enumerable.Range(0, rs.FieldCount).Select(rs.GetName).ToList();
while (rs.Read())
{
foreach (string column in columns)
{
if (rs[column] != System.DBNull.Value)
{
t.GetType().GetProperty(column).SetValue(t, Convert.ChangeType(rs[column], rs[column].GetType()), null);
}
}
}
rs.Close();
return t;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return default(T);
}
finally
{
rs.Dispose();
}
}
AutoMapper (https://github.com/AutoMapper/AutoMapper)를 사용할 수 있습니다. – kmatyaszek