Sunday, September 04, 2011

Silverlight - How to clone any instance of object (including EF entities)

הקדמה

מאמר זה מציג דרכים לשכפול של אובייקטים בSilverilght. פעולה כזו נדרשת לא מעט כאשר מתעסקים עם נתונים ורוצים לאפשר למשתמש דרך לשכפל אותם.

ראיתי מספר דוגמאות ברשת שבהן מבצעים שכפול ידני (יצירת אובייקט והעתקת כל property בנפרד). הדרכים שמופיעות במאמר זה מראות כיצד ניתן לעשות פעולה זו באופן אוטומטי ובכך לצמצם טעויות אנוש, ליצור קוד נקי וקריא יותר, למנוע קידוד פרטני hardcoded ומימוש פתרון גנרי.
מגבלות טכנולוגיות

הדרכים המתוארות במאמר משתמשות בReflection. מטעמי אבטחה חסמו בSilverlight  את האפשרות לגשת לPrivate members. המשמעות היא שהאובייקט המשוכפל יהיה זהה לאובייקט המקור בproperties שהם public בלבד. קישור להסבר על הגבלה זו בMSDN.
שיטה 1 – שכפול באמצעות DataContractSerializer

בשיטה זו אנחנו עושים שימוש באובייקט DataContractSerializer כדי ליצור את השכפול.
הכנה

הוסף רפרנס לקובץ הבא:

System.Runtime.Serialization.dll

הוסף את הusing הבא בתחילת הקובץ:

using System.Runtime.Serialization;
קידוד

נגדיר אובייקט מסוג Person. בהמשך המאמר נשתמש באובייקט זה לצורך הדגמה של השיטות.

public class Person
{
    public string Name { get; set; }
    public int ChildrenCount { get; set; }       
    public DateTime Birthday { get; set; }

    [IgnoreDataMember]
    public string Comments { get; set; }
}


Read more: Eran Sakal's blog
QR: silverlight-how-to-clone-any-instance-of-object-including-ef-entities.aspx

Posted via email from Jasper-Net