What alternatives are there to property.setvalue()? I’ve read that it is very slow. I’m using it to map IDataReader to POCO objects.
This is a truncated version of the code. Everything here is very new to me. I know there a lot of frameworks that accomplish this task. However, we can’t use them.
public class DbAutoMapper<T>
{
public IEnumerable<T> MapToList(IDataReader reader)
{
var list = new List<T>();
while (reader.Read())
{
var obj = Activator.CreateInstance<T>();
foreach (PropertyInfo prop in obj.GetType().GetProperties())
{
foreach (var attribute in prop.GetCustomAttributes(true))
{
prop.SetValue(obj, value, null);
}
}
list.Add(obj);
}
return list;
}
}
Firstly: why are you repeating the reflection for every attribute, when you don’t use the attribute?
Second: assuming you intended to map this by name, column-to-property (which isn’t what the code currently does), consider a tool like dapper, which does all this for you, including cached high-performance reflection-emit. It’ll also handle the command itself for you. For example:
If you need more control, consider FastMember, which provides fast member-access (again, reflection-emit), but without being specific to data access: