EF TPH Inheritance
מה שאני מנסה לעשות הוא דבר פשוט. מערכת ווב שיש לה משתמשים רבים, אבל הם נחלקים לקבוצות עם תפקידים שונים. תחשבו על uber: יש נהגים, יש נוסעים, יש מנהלי מערכת. כולם "משתמשים" וכולם נרשמים באותו מקום, אבל מבחינת טבלאות בדטהבייס, הם שונים לגמרי. יש להם כמה דברים משותפים: אימייל, טלפון, שם, וכן הלאה. אבל יש גם הרבה שונה. השאלה: איך לנהל את זה ב EF6 code first ?
דרך אחת: טבלת משתמשים עם נתונים בסיסיים המשותפים לכולם, ועוד טבלת נהגים, ועוד טבלת נוסעים. אפשר להשתמש ב roles כדי לדעת (ולקבוע) מי נהג ומי נוסע. זה קצת מקשה על העבודה, כי תמיד נתוני המשתמש נמצאים בשתי טבלאות שונות.
דרך שניה נקראת TPH והיא לעשות base class של משתמשים, ואז 2 או יותר קלאסים של סוגי משתמשים (נהגים, נוסעים, מה שלא יהיה) שיורשים מטבלת הבסיס. משם בערך נותנים ל EF לעשות את העבודה. התוצאה אמורה להיות טבלה אחת ב DB (בזבוז מקום, אבל ביצועים טובים), ו3 סוגי entity לרשותך בקוד המשתמש ב EF. לדוגמה יהיו לך person, driver, passenger שתוכל לעשות איתם כל פעולה. לנהג למשל יהיה מספר רישיון נהיגה (כדאי), ולנוסע - לא. בפועל כאמור ב DB כולם יושבים ביחד באותה טבלה. זו רק נוחיות למתכנת.
האם יצא לכם להשתמש בסיפור הזה? במה אתם משתמשים, הרי הסנריו הזה קורה בהמון מערכות. אולי יש דרך פשוטה יותר ואני סתם מסתבך?
לינקים למתעניין:
http://weblogs.asp.net/manavi/inher...ode-first-ctp5-part-1-table-per-hierarchy-tph
http://www.asp.net/mvc/overview/get...ntity-framework-in-an-asp-net-mvc-application
מה שאני מנסה לעשות הוא דבר פשוט. מערכת ווב שיש לה משתמשים רבים, אבל הם נחלקים לקבוצות עם תפקידים שונים. תחשבו על uber: יש נהגים, יש נוסעים, יש מנהלי מערכת. כולם "משתמשים" וכולם נרשמים באותו מקום, אבל מבחינת טבלאות בדטהבייס, הם שונים לגמרי. יש להם כמה דברים משותפים: אימייל, טלפון, שם, וכן הלאה. אבל יש גם הרבה שונה. השאלה: איך לנהל את זה ב EF6 code first ?
דרך אחת: טבלת משתמשים עם נתונים בסיסיים המשותפים לכולם, ועוד טבלת נהגים, ועוד טבלת נוסעים. אפשר להשתמש ב roles כדי לדעת (ולקבוע) מי נהג ומי נוסע. זה קצת מקשה על העבודה, כי תמיד נתוני המשתמש נמצאים בשתי טבלאות שונות.
דרך שניה נקראת TPH והיא לעשות base class של משתמשים, ואז 2 או יותר קלאסים של סוגי משתמשים (נהגים, נוסעים, מה שלא יהיה) שיורשים מטבלת הבסיס. משם בערך נותנים ל EF לעשות את העבודה. התוצאה אמורה להיות טבלה אחת ב DB (בזבוז מקום, אבל ביצועים טובים), ו3 סוגי entity לרשותך בקוד המשתמש ב EF. לדוגמה יהיו לך person, driver, passenger שתוכל לעשות איתם כל פעולה. לנהג למשל יהיה מספר רישיון נהיגה (כדאי), ולנוסע - לא. בפועל כאמור ב DB כולם יושבים ביחד באותה טבלה. זו רק נוחיות למתכנת.
האם יצא לכם להשתמש בסיפור הזה? במה אתם משתמשים, הרי הסנריו הזה קורה בהמון מערכות. אולי יש דרך פשוטה יותר ואני סתם מסתבך?
לינקים למתעניין:
http://weblogs.asp.net/manavi/inher...ode-first-ctp5-part-1-table-per-hierarchy-tph
http://www.asp.net/mvc/overview/get...ntity-framework-in-an-asp-net-mvc-application