DataReader Helper
הרבה פעמים יש לי טבלה ב DB ובמקביל יש לי אובייקט שממופה אחד לאחד לטבלה,
ואז כשאני רוצה להביא את הנתונים, אני כל פעם צריך לכתוב את הקוד של בניית האובייקט מתוך ה reader,
אז כדי להקל עלי את העבודה, כתבתי את המתודה הבאה:
public static object Build(DbDataReader reader, Type type)
{
ConstructorInfo ctor = type.GetConstructor(Type.EmptyTypes);
if (ctor == null)
{
throw new Exception(@"To use reader helper,
your class must have
a less parameter constructor");
}
object newObject = ctor.Invoke(null);
PropertyInfo[] properties = type.GetProperties();
foreach (var prop in properties)
{
object value = reader[prop.Name];
if (value is DBNull)
{
prop.SetValue(newObject, null, null);
}
else
{
prop.SetValue(newObject, value, null);
}
}
return newObject;
}
ועכשיו הקוד שלי נראה כך:
while (reader.Read())
{
reqs.Add((Courses)Builder.Build(reader, typeof(Courses)));
}
הסבר הקוד הוא פשוט.
המתודה מקבל reader ו type של אובייקט, ומחזירה מופע של ה type.
התנאי היחיד הוא שיהיה ל type בנאי ללא פרמטרים.
אחרי שיש לי את הבנאי, אני מייצר אובייקט.
ורץ על כל המאפיינים, וממלא אותם מתוך ה reader,
פשוט נחמד וחוסך עבודה.