DCSIMG
Entity Framework - Part 5 - שלמה גולדברג (הרב דוטנט)

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

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

Entity Framework - Part 5

 

אז בפרק האחרון דברנו על מה ה - designer עושה מאחורי הקלעים עבור הסכמה שלנו, אפשר להאריך בנושא הסכמה עוד הרבה, אבל חשבתי שכדאי קצת לראות קוד ואיך לעבוד עם ה - EF ואחרי זה נסבך קצת את הסכמה.
 
היות שבסיס הנתונים שלנו כרגע ריק - אנחנו נכתוב קוד שיכניס בו נתונים ונדון בכמה נושאים.
 
כדי לעבוד עם EF אנחנו חייבים לייצר מופע של מחלקה שיורשת מ - ObjectContext במקרה שלנו EFLabEntities,
 
using (EFLabEntities context = new EFLabEntities())
{
 
 
}
 
במקרה שלנו יהיה חכם לעשות את זה עם using כי אנחנו רוצים לייצר את ה - context להוסיף לו אובייקטים לשמור לבסיס הנתונים, וזהו.
בחיים האמיתיים יתכן ונרצה לשמור את ה - context ב - session וכו'.
 
כדי להוסיף משתמשים חדשים למערכת - אנחנו צריכים לייצר מופע של User - יש לנו שני דרכים, הראשונה עם המתודה הסטטית CreateUser (מתודה שנוצרת בצורה אוטומטית עבור כל מי שיורש מ - EntityObject) והאופצייה השנייה היא לייצר מופע של User ולתת ערכים למאפיינים, בסופו של דבר אנחנו צריכים להוסיף את ה - User שנוצר ל - Users (ל - EntitySet).
 
החתימה של CreateXXX נוצרת עם כל המאפיינים שאינם nullable, ולכן נכתוב את הקוד הבא
 
using (EFLabEntities context = new EFLabEntities())
{
    User user1 = EntityFrameworkLab.User.CreateUser(1, "shlomo132", "shlomo@gmail.com");
    user1.PenName = "shlomi";
    context.AddToUsers(user1);
 
    User user2 = new EntityFrameworkLab.User()
    {
        Id = 2,
        Name = "noam",
        Gender = UserGender.Male,
        Email = "noam@gmail.com",
        PenName = "noami"
    };
 
    context.AddToUsers(user2);
 
    context.SaveChanges();
 
}
 
אחרי שהקוד ירוץ יתווספו לבסיס הנתונים שני משתמשים חדשים.
 
כמה נקודות:
אחרי שיצרנו את המופע של User אנחנו צריכים להוסיך אותו ל - EntitySet (במקרה שלנו Users), בסוף התהליך צריך לזכור לעשות SaveChanges כדי לשמור את הנתונים לבסיס הנתוניםץ
 
אין משמעות למאפיין Id (עבור פעולות insert) אפשר לתת לו כל ערך (אפשר אפילו להתעלם ממנו - ולא לתת לו שום ערך) היות שזה מוגדר כמספר רץ הוא יקבל מיד אחרי ה - SaveChanges את המספר הנכון (וכמובן זה יעדכן את האובייקט עם המספר הנכון), אפשר אפילו להוסיף מתודה סטטית עבור CreateXXX ל - partial כדי לוותר על ה - Id
 
 
public partial class User
{
 
    public static User CreateUser(string name, string email)
    {
        return CreateUser(0, name, email);
    }
}
 
 
 דרך אגב יש באג ב - EF, במקרה ששדה מוגדר בבסיס הנתונים כ - NULL אבל בסכמה זה הוגדר (ידנית כמובן) כ - NOT NULL - המערכת תאפשר לייצר אובייקטים ולשמור אותם בבסיס הנתונים מבלי להתריע אבל ברגע שהנתונים ישלפו מבסיס הנתונים האפליקצייה תעוף ויצטרכו לעדכן ידנית את הנתונים בבסיס הנתונים, ולכן מומלץ להשתמש מה שיותר במתודת CreateXXX שמכריחה להכניס לכל מה שהוגדר כ - NOT NULL ערכים.
 
ותודה לעידו על התמיכה
פורסם: Nov 17 2009, 07:24 PM by Shlomo | with 7 comment(s)

תוכן התגובה

shlomo כתב/ה:

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

אני יכול להניח שרק במידה ובבסיס הנתונים יש טבלאות שלא קשורות אחד לשני בכלל - זה יהיה חכם לחלק לכמה מודלים

# December 10, 2009 5:44 PM

קובי כתב/ה:

היי, אחלה תרגיל.

עד היום השתמשתי ב TypedDataset שהוא נתן לי פתרון למצב של offline.

יש מצב להגדיר את ה EF שיעבוד בצורה כזו, במקום כל הזמן לתשאל את בסיס הנתונים על ידי LINQ?

ניסיתי לבצע select על QbjectQuery ובכך לשמור את הנתונים במצב offline. אבל זה לא נראה לי נכון.

יכול להיות שחסר לי משהו בסיסי?

תודה

# December 28, 2009 11:45 AM

Shlomo כתב/ה:

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

# December 28, 2009 12:04 PM

דוד כתב/ה:

יש לי מערכת שצריכה לעבהוד מול כמה גרסאות שונות של אותו DB (כלומר אצל לקוח אחד יש לנו גרסא א' של DB ואילו אצל לקוח ב' יש לנו גרסא ב' של אותו DB - ההבדלים הם בעיקר בשדות). האם EF יכול לתת מענה לגישה לשני (ואפילו יותר) הDB השונים

# February 11, 2010 9:38 PM

שירה כתב/ה:

הי

יש לי בעיה הוא לא מכיר לי את ה- using ?  ושאלה נוספת אני רוצה לעבוד עם Visual Wab Gui  האם ידוע לך על אתר שמדגים?

# October 25, 2011 3:12 PM

Shlomo כתב/ה:

כדי שיכיר את ה - using צריך להוסיף reference ל - System.data.entity

# October 25, 2011 5:24 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 4 and 6 and type the answer here:


Enter the numbers above: