Entity Framwork איזה פחד...
-
אני מרחרח שוב (פעם חמישים וכמה :)) סביב העסק הזה...
כעת אני הולך על Code First. בדרך זו (בשונה ממודל פירסט/דטה בייס פירסט), אין כלום חוץ מקוד שלי (אין קבצי XML וסכמות ומיפוי וקונקשיין סטרינג לא קריא...)
מה אני רוצה ממכם? איחולי הצלחה
פורסם במקור בפורום CODE613 ב25/03/2014 20:24 (+02:00)
-
שיש פורום אחד שאני נמצא שם הרבה וכשיש שאלה על אנטיטי אני :twisted: :oops: :evil:
בנוסף, ברצינות, אני יותר ויותר שומע על זה הבטחות.
נו, נראה אם אני מצליח או מתייאש.
גם בWPF לקח לי עשרות נסיונות נפל להיכנס שלא עלו בהצלחה עד שכעת אני לא זוכר אופציה אחרת.פורסם במקור בפורום CODE613 ב25/03/2014 20:42 (+02:00)
-
להתייאש בטח שאין לך מה, כי ברור שאנשים כמוני וכמוך כתבו את EF, ואם כן כל שכן שאנשים כמוני וכמוך יכולים 'רק' ללמוד איך להשתמש בו.
EF לא עובד בכישוף, וגם אם הוא נובח הוא לא נושך כך שאין מקום לפחד כלל ...על איזה מסד אתה מתנסה?
פורסם במקור בפורום CODE613 ב25/03/2014 21:02 (+02:00)
-
חשוב לי להגיב:
כבר חודשים אני מתחנן כאן בפורום לעזרה באנטיטי ובקושי רב הצלחתי
כיום אני עובד על אנטיטי וזה פשוט תענוג
מה שכן אני הצלחתי לעבוד רק עם dataBaseFirst
בנסיונות שלי עם codeFirst נחלתי קצת כשלונות
לכאורה codeFirst יותר טוב כי אתה שולט בקוד שכתבת
אבל לא נפגשתי עם זה שכ"כ קשה עם הקוד של הdataBaseFirst זה קצר וקריא
כשאראה שאתם בקיאים בעניינים כבר אעלה לכאן את הקשיים שליפורסם במקור בפורום CODE613 ב26/03/2014 12:03 (+02:00)
-
אז בא אתאר איפה אני אוחז:
-
הורדתי והתקנתי את הגירסה האחרונה של EF (זמין או בתוספים או בהורדה נפרדת).
-
פתחתי פרוייקט (לא Console אלא Wpf, העדפה אישית).
-
קליק ימני על הפרוייקט Add... אח"כ New Item... ובחרתי בADO.NET Entity Data Model.
-
הוא יוצר כמה דברים אוטומטית שעדיין לא עמדתי על טיבם (כמה שmagicode לא אוהב כאלו דברים!).
-
בין היתר הוא יצר דף חדש בשם Model1. מחקתי בו הכל והתחלתי לכתוב:
(הדוגמאות בVB, כי בה אני כותב, מי שרוצה תרגום של קטע לא ברור שיבקש ואתרגם בשמחה).Public Class Model
Inherits DbContextPublic Property Tormim As DbSet(Of Torem)
End Class
Public Class Torem
Public Property Name As String
End Class
פשוט מאוד, נכון? -
עוד קוד קטן בשגרת לחיצה של כפתור בחלון WPF:
Dim m As New Model()
m.Tormim.Add(New Torem() With {.Name = "fsdfdsfsdf", .idt = Now.Millisecond})
m.SaveChanges() -
הרצה ואופ. שגיאה. צריך מפתח לכל ישות. ובמחלקה שלי? אין.
-
איך מגדירים במחלקת Torem מפתח ראשי? טוב אז בדוגמאות ברשת ראיתי שלא מגדירם ובכל אופן עובד להם. נו, אז חיקיתי את הדוגמה שלהם, בה יש מאפיין בשם id, והמנגנון של הEF מזהה לפי שמו שמטרתו לשמש כמפתח ראשי. נסיתי לשנות לככה:
Public Class Torem
Public Property id As Integer
Public Property Name As String
End Class
עובד! כמה נחמד שהוא מבין לבד (מצד אחד לא כ"כ, אהה?). ומה אם אני רוצה ששם מאפיין המפתח יהיה שונה מid? או שיהיה מרובה שדות? או שיהיה שדה בשם id שלא משמשת כמפתח? אז בדקתי ברשת ומשתמשים בAttribut שונים למקרים כאלו ואחרים. לדוגמה, ככה יעבוד:Public Class Torem
<System.ComponentModel.DataAnnotations.Key>
Public Property MafteahRashi As Integer
Public Property Name As String
End Class -
אז מה אם זה עבד? איפה הוא שמר את העסק בכלל? טוב אז מחרוזת החיבור הדיפולטית היא זו:
Data Source=(localdb)\v11.0;Initial Catalog=Entity.Model;Integrated Security=True;MultipleActiveResultSets=True
ועוד לפני שממש קראתי מה כתוב בה החלטתי שאני לא ילד שמחליטים בשבילו, ואני רוצה לשים מחרוזת משלי.
קצת בדקתי בעזרה, רחרחתי בApp.Config ומצאתי את המחרוזת. שיניתי אותה חגיגית, והרצתי שוב. הכל עבד, אבל כשפתחתי את המסד שלי, זה שציינתי במחרוזת, לא היה שם כלום.
קצת היה מעצבן, ואז הבנתי, האלמנט בXML ששמו App.Config נראה ככה:<add name="Model1" connectionString="Data Source=Dovid1-pc;Initial Catalog=MyTests;Integrated Security=True" providerName="System.Data.SqlClient" />
וזה נוצר אוטומטית בשלב 4. האריביוט Name התאים (אז...) לשם המחלקה שהוא יצר: Model1 אך אני קראתי למחלקה שלי Model. אז מבחינתו לא היה קונקשיין סטרינג מתאים אז הוא לקח (לא יודע מאיפה) את המחרוזת הרירת מחדל הזו. כששיניתי את האטריביוט Name לModel הכל הסתדר, ב"ה.
טוב, התעייפתי. המשך יבוא...
פורסם במקור בפורום CODE613 ב26/03/2014 15:52 (+02:00)
-
-
אתה יכול גם להגדיר את מחרוזת החיבור כך:
m.Database.Connection.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DB.mdf;Integrated Security=True;User Instance=True"
כמובן שבמקרה כזה אתה צריך ליצור קובץ DB.mdf בתיקיית היישום.
דבר נוסף ששמתי לב כאשר פתחתי את המסד הוא ש-MafteahRashi קיבל ערכים של 1, 2 , 3 וכו' ולא כמו שהוגדר בקוד על אלפיות השניה.פורסם במקור בפורום CODE613 ב26/03/2014 19:02 (+02:00)
-
@דוד ל.ט.
- קליק ימני על הפרוייקט Add... אח"כ New Item... ובחרתי בADO.NET Entity Data Model.
- הוא יוצר כמה דברים אוטומטית שעדיין לא עמדתי על טיבם (כמה שmagicode לא אוהב כאלו דברים!).
- בין היתר הוא יצר דף חדש בשם Model1. מחקתי בו הכל והתחלתי לכתוב
ראיתי בנתיים שבמקום ליבא ואחר כך מחוק אפשר פשוט להוסיף הפניות ל 3 הרכבות:
EntityFramework.dll, EntityFramework.SqlServer.dll
שנמצאים בכתובת בכתובת: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDEולהרכבה: System.ComponentModel.DataAnnotations.dll
שנמצאת ברשימה הרגילה של הגדרת הפניות.פורסם במקור בפורום CODE613 ב26/03/2014 19:25 (+02:00)