Reuse types with WCF Data Services
כאשר עושים Add service reference לשירות נתונים נוצרים אובייקטים חדשים המייצגים את המודל. זאת בנוסף לפרוקסי (אותו אנחנו בעצם רוצים) המכיל את הנקודות קצה לכל האלמנטים במודל.
בWCF – ישנה אפשרות לשימוש חוזר באובייקטים כאשר הן לשרת והן ללקוח יש קישור אליהן.

עכשיו נניח תצורה מסויימת של פרוייקט.
- רוצים לעבוד N-tier והתבנית הנוחה ביותר היא Self tracking object
- רוצים למנוע תלויות ב Entity framework – אז מזיזים את הישויות לפרוייקט נפרד.
- רוצים להשתמש בWcf Data services ע”מ לקבל אובייקטים מהשרת.
- רוצים להשתמש גם בשירותים אחרים של WCF כדי להחזיר אובייקטים לשרת (עדכון וכו’)
התצורה הזו אינה דמיונית, היא מאד הגיונית, לתשאל עם Data Services זה תענוג, אולם שאר הפעולות (עדכון,הוספה,מחיקה) בד”כ דורשות קצת יותר לוגיקה ממה שנוח לעשות עם Data Services.
הבעיה כמובן היא שגם אם ללקוח יש קישור לפרוייקט של הישויות תהיה לו כפילות של ישויות תחת Namespace אחר.
ב Tip 52 מוצגת שיטה שלמעשה מיצרת פרוקסי ידנית כדי לעקוף את הבעיה הזו. רק שיש בעיה עם הגישה הזו. זה ידני – כל שינוי בשמות, הוספת/הורדת ישויות מחייב עריכה ידנית.
לכן הוספתי תבנית TT עם שינויים קלים שעושה את העבודה עבורי.
מצ”ב פרוייקט לדוגמא.
נקודות לתשומת לב -
- ב TT של הcontext יש תוספת של הNamespace של הישויות (החדש אם הוא שונה)
- ישנו override בDataService כדי לאפשר לMetadata של השירות לעלות בצורה תקינה. אבל זה נושא לפוסט אחר.
- ב TT של הישויות צריך לתקן את הנתיב ל Edmx.
- יש להוסיף רפרנס ל - System.Data.Services.Client מכיוון שהפרוקסי יורש מDataServiceContext
- ב TT של צד לקוח יש לעדכן נתיב ל Edmx והnamspace לישויות.
- אם נוצר קובץ כפול ואחד עם “1” בסוף – זו איזו תקלה לא ברורה שניתן לתקן (זה רק מעצבן ויזואלית) אם נכנסים לקובץ של הפרוייקט ומשנים שם את הערך של LastGenOutput שיהיה בלי 1.