כפי שאתם יודעים, אחד מהחידושים של C# 3.0 הוא Partial Method שמאפשר לנו לכתוב מתודות Partial ולממשן (או שלא) בקובץ נפרד. אחד המקומות שמשתמשים לדוגמה ב-Partial Method הוא בקוד המחולל מסכמת EDMX של Ado.Net Entity Framework.
במסגרת פרויקט שעשיתי לאחרונה הייתי צריך לבנות דיאגרמת EDMX תכנותית, לייצר ממנה קוד CS ולקמפל את הקובץ שנוצר ל-DLL. השלבים שיש לבצע הם :
- בניית קובץ EDMX - הסבר בפוסטים הבאים
- בניית CS מתוך ה-EDMX (או ליתר דיוק, מתוך ה-CSDL שבתוכו). זאת ניתן לעשות באמצעות מחלקות ה-Designer של Entity Framework
- קימפול קובץ ה-CS שנוצר, באמצעות מחלקת CSharpCodeProvider.
ההמרה ל-CS עבדה, אבל הקמפול זרק שגיאות של invalid token void שאחרי בדיקה קצרה התברר שמדובר ב-Partial Methods שמופיעים בקובץ ה-CS. מתברר שברירת המחדל של CSharpCodeProvider היא לקמפל ל-2.0 ולא ל-3.5, אבל בירור קצר ב-MSDN העלה שניתן לספק ל-Constructor פרמטר Dictionary עם גרסת הקומפיילר.
מי שינסה לרשום את הקוד כפי שרשום ב-MSDN, שיצפה לקבל הודעת שגיאה אחרת (csc.exe not found), כי מתברר שיש טעות בתיעוד - לפי ה-MSDN יש להוסיף ל-Dictionary את המפתח CompilerVersion עם הערך המחרוזתי 3.5, אבל הערך הנכון הוא V3.5 (תוספת ה-V לפני המספר).
בפוסטים הבאים אני אראה קצת דוגמאות איך בונים דינאמית קבצי EDMX וכמה מסקנות אישיות.