none
entity frameworks + Stored Procedures RRS feed

  • שאלה

  • החלטתי להשתמש ב entity frameworks
    ועם wcf data services
    חשוב לי נורא שהכל יעבוד עם Stored Procedures
    אז פשוט עשיתי מיפוי ל insert update delete דרך הממשק
    ובקשר ל select פשוט יצרתי SP שלי וב wcf data services חשפתי אותם
    הבעיה שלי היא שנניח ויש לי SP שמחזירה Orders והיא עושה inner join לטבלה של products , אני לא רוצה שזה יחזיר לי את זה מסודר במבנה שיציג לכל order את ה products שלו , ולא כמו עכשיו שזה מחזיר לי את זה כשורות כמו ב DB, שה order משתכפל על כל המוצרים, ד"א אם אני עושה את זה בלי SP עם המשתנה expand זה עובד מצויין אבל זה שאילתה שהוא בונה לבד ולא SP
    אשמח לקבל עזרה, תודה.
    יום שלישי 25 אוקטובר 2011 15:06

תשובות

  • SP לא עובד עם אובייקטים (במובן התכנותי: מופע של מחלקה). הוא מאפשר לבצע פעולות ו/או לקבל INPUT של אלמנטים מסוגים מסויימים ו/TU להחזיר אלמנטים מסוגים אלו (אלמנטים של SQL אינם כוללים מושג אובייקט כאמור במובן התכנותי). לכן SP לא יכול להחזיר אובייקטים. אפשר לעקוף את הבעיה ככל הנראה אם היה לנו אפיון מלא. הכיוון הכי הגיוני שיתאים בניחוש ראשוני זה פשוט לקבל את הנתונים במבנה טבלאי שטוח ואז באפליקציה כבר לטפל בהם (אם אתה נעול על צורת העבודה שבחרת)


    גולש יקר

    • אני לא עובד מייקרוסופט וכמוני כך גם רוב התומכים בפורומים. כל עזרה הניתנת בפורומים היא בהתנדבות מוחלטת! אנא התייחס לכך בכל פנייה.
    • אם פתחת שרשור אז אתה אחראי עליו! אנא זכור לבדוק את התגובות עד לרגע שבחרת לסגור את השרשור. הדבר הכי לא נעים למי שמשקיע מזמנו זה כשיש הרגשה של בזבוז זמן ומי ששאל בכלל לא מגיע לקבל את העזרה.
    • בסיום כל שישור יש לסגור את השרשור על ידי סימון תשובה אחת או יותר שקיבלת, כמו כן ניתן ומומלץ מאוד לסמן את כל תגובות המועילות בשירשור ואולי גם לזרוק מילה טובה למי שניסה לעזור?

    בברכה, גלישה מהנה
     

    • סומן כתשובה על-ידי Arik Poznanski יום שלישי 29 נובמבר 2011 14:32
    יום חמישי 27 אוקטובר 2011 00:56
    מנחה דיון

כל התגובות

  • מקור הבעיה: אחד הייתרונות של EF הוא שה ORM יודע לנהל עבורך את הקשרים בין האלמנטים במסד הנתונים לבד. בניגוד לשאילתות או SP במסד הנתונים שעובדות רק עם נתונים טבלאיים. ז"א בעוד EF יודע לעבוד עם אובייקטים ולכן עבור כל רשומה מטבלת אב הוא "מכיר" את האובייקטים המקושרים אז ב SP מה שקורה זה השטחה (מהמילה שטוח FLAT) של הנתונים למבנה של טבלה

    שאלה להבהרה: למה בחרת לעבוד עם SP בצורה כזו כשזה חלק מהתפקיד של ה EF לנהל את מסד הנתונים עבורך?האם הסיבה היא רק עניין של החשיפה (אבטחה) וההסתרה של הטבלה המקורית?

    * קוד היה יכול לעזור כאן כדי להבין ולראות על מה מדובר וגם לתת לך פתרון מתאים אולי

    הפתרון (כרגע ללא אפיון נוסף זה על סמך ניחוש הבעיה והמצב): בעוד SP עובד עם נתונים ללא קשרים ולכן יוצר לך את הבעיה VIEW במסד הנתונים מאפשר לשמור על קשרים + מאפשר לחשוף חלק מסויים בלבד מטבלה/נתונים/או אפילו צירוף נתונים מטבלאות. תבדוק אם שימוש ב VIEW לא פותר לך את הבעיה


    גולש יקר

    • אני לא עובד מייקרוסופט וכמוני כך גם רוב התומכים בפורומים. כל עזרה הניתנת בפורומים היא בהתנדבות מוחלטת! אנא התייחס לכך בכל פנייה.
    • אם פתחת שרשור אז אתה אחראי עליו! אנא זכור לבדוק את התגובות עד לרגע שבחרת לסגור את השרשור. הדבר הכי לא נעים למי שמשקיע מזמנו זה כשיש הרגשה של בזבוז זמן ומי ששאל בכלל לא מגיע לקבל את העזרה.
    • בסיום כל שישור יש לסגור את השרשור על ידי סימון תשובה אחת או יותר שקיבלת, כמו כן ניתן ומומלץ מאוד לסמן את כל תגובות המועילות בשירשור ואולי גם לזרוק מילה טובה למי שניסה לעזור?

    בברכה, גלישה מהנה
     

    יום רביעי 26 אוקטובר 2011 07:28
    מנחה דיון
  • בחרתי לעבוד עם SP מכיוון שהביצועים שלו יותר טובים, הקימפול של ה SP נשמר בקאש, אני כבר אעלה פה קוד דוגמה

    בעיקרון אני צריך שאותה שאילתה שה EF מייצר (שזו שאילתה נכונה וטובה) תרוץ תחת SP, אולי יש איזה דרך לעשות זאת , איזה "טריק" :) ?

     

    תודה.

    יום רביעי 26 אוקטובר 2011 07:33
  • SP לא עובד עם אובייקטים (במובן התכנותי: מופע של מחלקה). הוא מאפשר לבצע פעולות ו/או לקבל INPUT של אלמנטים מסוגים מסויימים ו/TU להחזיר אלמנטים מסוגים אלו (אלמנטים של SQL אינם כוללים מושג אובייקט כאמור במובן התכנותי). לכן SP לא יכול להחזיר אובייקטים. אפשר לעקוף את הבעיה ככל הנראה אם היה לנו אפיון מלא. הכיוון הכי הגיוני שיתאים בניחוש ראשוני זה פשוט לקבל את הנתונים במבנה טבלאי שטוח ואז באפליקציה כבר לטפל בהם (אם אתה נעול על צורת העבודה שבחרת)


    גולש יקר

    • אני לא עובד מייקרוסופט וכמוני כך גם רוב התומכים בפורומים. כל עזרה הניתנת בפורומים היא בהתנדבות מוחלטת! אנא התייחס לכך בכל פנייה.
    • אם פתחת שרשור אז אתה אחראי עליו! אנא זכור לבדוק את התגובות עד לרגע שבחרת לסגור את השרשור. הדבר הכי לא נעים למי שמשקיע מזמנו זה כשיש הרגשה של בזבוז זמן ומי ששאל בכלל לא מגיע לקבל את העזרה.
    • בסיום כל שישור יש לסגור את השרשור על ידי סימון תשובה אחת או יותר שקיבלת, כמו כן ניתן ומומלץ מאוד לסמן את כל תגובות המועילות בשירשור ואולי גם לזרוק מילה טובה למי שניסה לעזור?

    בברכה, גלישה מהנה
     

    • סומן כתשובה על-ידי Arik Poznanski יום שלישי 29 נובמבר 2011 14:32
    יום חמישי 27 אוקטובר 2011 00:56
    מנחה דיון