locked
שאלה בנוגע ל ASP.NET WebAPI RRS feed

  • שאלה

  • שלום חברים,

    יש לי פרוייקט עם ASP.NET WebAPI ו-Entity Framework.

    יש דבר נורא מגניב בVS שאפשר ליצור controller עם template שמקבל סוג של entity (נניח Person שממופה באמצעות EF) - ויודע ליצור עבורו api controller עם פונקציות get, post, delete, put בצורה אוט'. זה דבר ממש יעיל.

    העניין הוא ששמתי לב שהוא יוצר בקונטרולר את החיבור לDB, ז"א נוכל למצוא בתחילת הקונטרולר את השורה הבאה:

    ExampleEntities db = new ExampleEntities();

    ז"א, בכל קונטורלר אני יוצר מופע של DB ומשתמש בו בפונקציות השונות.

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

    אשמח לתגובתכם! תודה רבה


    יום שלישי 27 אוקטובר 2015 21:12

כל התגובות

  • שורת הקוד שהבאת כאן יוצרת את המופע אבל לא פותחת קשר למסד הנתונים :-)

    * אתה יכול לשים את העכבר על המחלקה וללחוץ על f12 זה יפתח לך את ההגדרה של המחלקה. שם תוכל לראות את הבסיס.

    הסבר: EF כולל שכבה שנקראת Object Services. בין שאר התפקידים, שכבה זו אחראית על ניהול החיבורים למסד הנתונים. החיבור למסד הנתונים נפתח רק כאשר יש בכך צורך. למשל כאשר אתה מריץ את המתודה db.Products.ToList או את המתודה db.Products.Add. באותה צורה ה Object Services גם אחראי על סגירת החיבור למסד הנתונים מייד כאשר הפעולה הסתיימה.

    אתה צריך לזכור שזה חלק מרכזי מעבודה עם ORM, ואם אתה לא מכיר את המושג כדאי לחפש מפני ש EF זה סוג של ORM ויש הרבה אחרים :-)
    וזה מוביל אותי לנקודה חשובה שאתה חייב לזכור!
    אתה דן בנושא של מיטוב ויעילות ושוכח ש ORM לא נועד למיטוב התוצאה אלא למיטוב העבודה של המפתח (זמן העבודה אמור להיות קצר יותר אבל לא איכות התוצאה). אם אתה מתכוון לפתח מערכת מורכבת וכבדה אני לא ממליץ על עבודה עם ORM בדרך כלל.

    בבלוג הבא תוכל לקרוא יותר על ה Object Services
    http://blogs.msdn.com/b/adonet/archive/2007/03/01/object-services-write-less-code.aspx


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]    [Linkedin]

    יום חמישי 29 אוקטובר 2015 01:28
    משיב