"השאלה אם זו הדרך הנכונה? או שיש דרך אחרת, טובה יותר לעשות זאת?"
זאת הדרך הנכונה"לגבי מה שרשמת שיהיה לי פרוייקט נפרד שמייצג את ה DB.
למה כדאי לפתוח פרוייקט נפרד בשביל זה?"
כי שוב בעולם האמיתי יהיו לך המון Entities (ישויות של דאטאבייס) שא. לא תמיד תרצה את כולם בפרוייקט הWEB שלך, וב. יכול להיות שיהיו לך אפליקציות נוספות שישתמשו באותן הEntities.
לדוגמא, תרצה בנוסף ליצור תוכנת WinForms, או WebService שתוכל לעדכן איתו את הDB, ללא שימוש באתר שלך. ככה, יהיה לך כבר את הפרוייקט מוכן כDLL לשימוש ע"י אפליקציות אחרות. וכשתעשה שינוי בפרוייקט הזה, כל האפליקציות יקבלו את השינויים האלה, במקום ליצור את הEntities האלה בכל פרוייקט בנפרד, ואז כל שינוי תצטרך לבצע בכל הפרוייקטים.
ושוב למען הסדר הטוב, תיקיית ה-Models בפרוייקט הMVC שלך לא צריכה לכלול אובייקטים של DB, כמו שאתה רוצה בדוגמאות, היא צריכה להכיל Modelים רזים שמייצגים מידע שאתה רוצה להציג בView מסויים, ורק בעולם וורוד הם יהיו אחד לאחד כמו המודלים של הDB.
"מתי עדיף לי להחזיר ViewResult ומתי עדיף להחזיר ActionResult?
למה למשל לא להשתמש תמיד ב ActionResult?"
ViewResult יורש מActionResul, לכן כשאתה מצהיר שהמתודה מחזירה ActionResult ואתה מבצע Return View(); אז זה תקין.
נהוג להשתמש ב-ActionResult מכיוון שחוץ מ-ViewResult, אתה יכול להחזיר המון יורשים אחרים כמו: JsonResult, FileResult וכו'... כולם יורשים מ-ActionResult ולא דורשים ממך להצהיר אחרת בראש הפונקציה.
מתקדם בלבד(אם אתה לא מבין דלג על הפסקה הזאת): מה גם שאם תרצה לעשות Override למתודות של קונרולר ממנו ירשת, בדרך כלל המתודות האלה יחזירו ActionResult ושוב יאפשרו לך לשחק עם הערך המוחזר (ViewResult, JsonResult, FileResult).
