DCSIMG
DataReader Helper - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

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,
 
 
פשוט נחמד וחוסך עבודה.

תוכן התגובה

Rotem Bloom כתב/ה:

מאוד נחמד אבל מה קורה אם אתה משנה את ה-PROPERTY של האובייקט? אתה חייב לשנות גם את ה-SQL שמחזיר את הערך המתאים לו.

בגלל זה אולי עדיף כבר להשתמש בתשתיות מוכנות כמו IBATIS או nhibernate

מה אתה אומר?

# April 16, 2009 4:17 PM

Shlomo כתב/ה:

נכון, אני מדבר במקרים הפשוטים, כשאנ ילא רוצה להיכנס לכל המערכות כמו entity ו nhibernate

למעשה, יש לי גם גרסה משוכללת של המתודה, עם attribute שיודע לקבל את השם ב DB,

אני אעלה את זה מחר (בלי נדר)

# April 16, 2009 6:47 PM

שלמה גולדברג כתב/ה:

בהמשך ל פוסט הקודם שכתבתי על איך להביא נתונים מטבלה שממופה לאוביקט (אחד לאחד - עבור כל עמודה יש מאפיין

# April 16, 2009 10:14 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 8 and 5 and type the answer here:


Enter the numbers above: