משיב מוביל
שליפת נתונים מENTITY FRAMEWORK

שאלה
-
תשובות
-
כדי לדעת למה נדרסת הרשומצה האחרונה אנחנו צריכים לראות את הקוד ולהבין מה את עושה :-)
אנחנו לא יכולים לנחשלגבי השאלה ראשונה אני חושב שהקישור שנתן tetitu הוא מסביר את החלק של ההכנסה למסד נהתונים ובאותו מקום יש גם מדריך לשליפת הנתונים (לא בדקתי אם הוא טוב):
http://geekswithblogs.net/dotNETvinz/archive/2010/03/11/fetching-data-from-database-and-populating-fields-in-the-form.aspx
Ronen Ariely
[Personal Site] [Blog] [Facebook]- הוצע כתשובה על-ידי pituachMVP, Moderator שבת 29 נובמבר 2014 17:38
- סומן כתשובה על-ידי Eran Sharvit יום שלישי 02 דצמבר 2014 09:03
-
הסיבה שנוצר קובץ חדש כאשר לא עובדים בשיטת Code First, זה בדרך כלל פשוט כי הקובץ אינו קיים במקום שה VS מצפה למצוא אותו (זה משהו שקורה בתהליך של בניית הפרויקט ב VS).
אתה שוכח שה BIN היא התקייה של הפרויקט הרץ, והתקייה מעל שאנחנו קוראים לה תקייה של הפרויקט היא רק לצרכי הפיתוח. בסיום הפיתוח קובץ ה EXE כאשר מייצרים אפליקציית הרצה למשל, יהיה בתקיית ה BIN בברירת המחדל. לכן זו התקיה של הבסיס של הפרויקט שלך במקרים אלו, כאשר אתה מריץ את הפרויקט ישירות ב VS.
בכל מקרה אתה יכול לשנות את המסלול לקובץ בצורה ידנית בשרשרת ההתחברות. שים לב שיש לך שימוש בהגדרה הבאה:
attachdbfilename=|DataDirectory|\ExampleDB.mdf;
מה שזה אומר שהקובץ שלך נמצא במיקום יחסי (אתה רואה שהמיקום לא מתחיל בשם הכונן אלא ב קןו שמסמן "המקום הנוכחי" ואז נכנסים לתקייה בשם DataDirectory ושם נעשה שימוש בקובץ בשם ExampleDB.mdf), אתה יכול לעשות שימוש במיקום מוחלט ולא יחסי אם אתה רוצה.
1. אני ממליץ בחום לא לעבוד בצורה כזו עם מסדי נתונים אלא לעבוד עם מסד נתונים שרץ ב Instance הראשי של שרת ה SQL. בניגוד לגרסאות בתשלום לגרסת ה SQL Express יש אפשרות לעבוד עם מה שנקראה Dynamic Instances או בשם אחר User Instances. זו שיטה מאוד לא מומלצת לדעתי! מה גם שבאפליקציה חיה אתה ככל הנראה תעבוד עם מסד נתונים שמוגדר בשרת, ולא כזה שיהיה בתקייה של הפרויקט.
בקיצור הרעיון הוא לעזור עם מסד הנתונים בדיוק כמו שעובדים עם כל מסד נתונים אחר בשרת SQL בגרסה אחרת. זה גם יעזור לך להבין את הטעות בדיון בפורום האחר, ולהבין שאם את עובדת עם SQL EPRESS אז את התקנת את השרת (גם אם את לא יודעת שהוא מותקן).
2. אם אתה כבר רוצה מסד נתונים שיהיה חלק מהפרויקט אז SQL Server Express לא מתאים מכיוון שהוא לא חלק מהפרויקט, הוא רק שומר את הקובץ בתקייה של הפרויקט אבל הוא רץ על השרת שמותקן. הדרך לעבודה עם מסד נתונים שהוא חלק מהפרויקט זה לעבוד עם מסדי נתונים מוטבעים (embedded database) באפליקציה כמו sqlite או SQL Server Compact. הה כבר מתקשר לדיון בפורום פיתוח WEB :-) שם יש עוד פרטים בנושא
הקישור הבא יוכל לעזור בדוגמאות של כל האפשרויות של שרשרת התחברות למסד הנתונים SQL מכל הסוגים שלו:
http://www.connectionstrings.com/sql-server-2012/2. בכל מקרה מומלץ להחליף את השימוש בשרת SQL Express המיושן בגישה שלו לשימוש בשרת גרסת ה LocalDB. רשמית מ 2012 זו ההמלצה של מיקרוסופט.
********** מצאתי עוד 2 קישורים מעולים שיכולים לעזור לך ***********
>> http://msdn.microsoft.com/en-us/library/jj653752(v=vs.110).aspx
קישור מעולה שכולל הסברים על שרשרת ההתחברות כולל האשרויות השונות. פחות דוגמאות מהקישור ששמתי מעל אבל יותר הסברים מעולים.
קישור מעולה על כל המאפיינים של המחלקה SqlConnection.ConnectionString. ניתן גם לראות בקישור את ההברל על שימוש במסלול מוחלט או מסלוול יחסי בשרשרת ההתחברות במאפיין של AttachDBFilename
Ronen Ariely
[Personal Site] [Blog] [Facebook]- נערך על-ידי pituachMVP, Moderator יום ראשון 30 נובמבר 2014 21:51
- סומן כתשובה על-ידי Eran Sharvit יום שלישי 02 דצמבר 2014 09:04
-
אהלן לאה,
אני לא ממש מבין מה השאלות שנaארו פתוחות :-)
אבל יש נקודה שעדיין לא מדוייקת. LOCALDB הוא לא מסד נתונים נתונים מוטבע. מסד הנתונים המוטבע של מיקרוסופט נקרא SQL Server Compact. לכן שימוש ב SQL Server Compact מאפשר לך לפתח אפליקציה בלי שהלקח יצתרך התקנה של דברים נוספים.SQL SERVER EXPRESS LOCALDB מחייב התקנה.
SQL SERVER EXPRESS מחייב התקנה.
SQL Server Compact לא מחייב התקנה, והוא מוטבע באפליקציה.
Ronen Ariely
[Personal Site] [Blog] [Facebook]- סומן כתשובה על-ידי lea_b יום חמישי 04 דצמבר 2014 08:28
כל התגובות
-
-
כדי לדעת למה נדרסת הרשומצה האחרונה אנחנו צריכים לראות את הקוד ולהבין מה את עושה :-)
אנחנו לא יכולים לנחשלגבי השאלה ראשונה אני חושב שהקישור שנתן tetitu הוא מסביר את החלק של ההכנסה למסד נהתונים ובאותו מקום יש גם מדריך לשליפת הנתונים (לא בדקתי אם הוא טוב):
http://geekswithblogs.net/dotNETvinz/archive/2010/03/11/fetching-data-from-database-and-populating-fields-in-the-form.aspx
Ronen Ariely
[Personal Site] [Blog] [Facebook]- הוצע כתשובה על-ידי pituachMVP, Moderator שבת 29 נובמבר 2014 17:38
- סומן כתשובה על-ידי Eran Sharvit יום שלישי 02 דצמבר 2014 09:03
-
ייבאתי כמובן את קובץ הMDF לתקיית הפרויקט ,
כשאני מריצה מתוסף לי קובץ MDF גם בתקיית הBINN
הקוד שלי :
ExampleDBEntities E = new ExampleDBEntities(); Student S = new Student { Id =6, Name = "DD", ClassId = 1 }; E.Students.Add(S); E.SaveChanges();
כאשר אני מריצה פעם ראשונה מתוסף לי שורה אחת לקובץ MDF שבתקיית הBIN,
כאשר אני מריצה פעם נוספת(עם שינוי נתונים כמובן) השורה האחרונה נדרסת (גם בקובץ MDF שבתקיית הBIN) ,
קובץ הקונפיג שENTITY MODEL יצר לי:
<connectionStrings> <add name="ExampleDBEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\ExampleDB.mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> </connectionStrings>
נראה לי שאני צריכה לשנות את הגדרת קובץ הקונפיג, אבל מה בדיוק?
-
את עבדת עם Entity Framework Code first ?
תבדקי את הבלוג הבא אם כן, זה ייתן לך את ההסבר והפתרון, אם אני מניחש את הבעיה נכון:
http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx* זה לא הקוד הרלוונטי היחיד, ייתכן שבמקרה זה צריך הרבה יותר מידע. אם תוכלי לצרף את הפרוייטק יהיה הכי קל. ייתכן שהבעיה קשורה להגדרות המחלקה שלך ב EF כפי שהבלוג מסביר מעל. במקרה המדוןבר בכל הרצה נוצר לנו למעשה מסד הנתונים מחדש ולכן נמחק הרשומה הקודמת :-) זו הבעיה הכי נפוצה
Ronen Ariely
[Personal Site] [Blog] [Facebook]- נערך על-ידי pituachMVP, Moderator יום ראשון 30 נובמבר 2014 13:47
-
ציטוט:
"יתכן שהבעיה קשורה להגדרות המחלקה שלך ב EF כפי שהבלוג מסביר מעל. במקרה המדוןבר בכל הרצה נוצר לנו למעשה מסד הנתונים מחדש ולכן נמחק הרשומה הקודמת :-) זו הבעיה הכי נפוצה"
זו אכן הבעיה, אבל לא השתמשתי עם CODE FIRST,
איך מגדירים בקובץ הקונפיג שבמקום DATA DIRECTORY הניגש לקובץ הMDF בתקיית הBIN אני רוצה לגשת לקובץ הנמצא בתקיית הפרויקט(מחוץ לתקיית הBIN)
-
הסיבה שנוצר קובץ חדש כאשר לא עובדים בשיטת Code First, זה בדרך כלל פשוט כי הקובץ אינו קיים במקום שה VS מצפה למצוא אותו (זה משהו שקורה בתהליך של בניית הפרויקט ב VS).
אתה שוכח שה BIN היא התקייה של הפרויקט הרץ, והתקייה מעל שאנחנו קוראים לה תקייה של הפרויקט היא רק לצרכי הפיתוח. בסיום הפיתוח קובץ ה EXE כאשר מייצרים אפליקציית הרצה למשל, יהיה בתקיית ה BIN בברירת המחדל. לכן זו התקיה של הבסיס של הפרויקט שלך במקרים אלו, כאשר אתה מריץ את הפרויקט ישירות ב VS.
בכל מקרה אתה יכול לשנות את המסלול לקובץ בצורה ידנית בשרשרת ההתחברות. שים לב שיש לך שימוש בהגדרה הבאה:
attachdbfilename=|DataDirectory|\ExampleDB.mdf;
מה שזה אומר שהקובץ שלך נמצא במיקום יחסי (אתה רואה שהמיקום לא מתחיל בשם הכונן אלא ב קןו שמסמן "המקום הנוכחי" ואז נכנסים לתקייה בשם DataDirectory ושם נעשה שימוש בקובץ בשם ExampleDB.mdf), אתה יכול לעשות שימוש במיקום מוחלט ולא יחסי אם אתה רוצה.
1. אני ממליץ בחום לא לעבוד בצורה כזו עם מסדי נתונים אלא לעבוד עם מסד נתונים שרץ ב Instance הראשי של שרת ה SQL. בניגוד לגרסאות בתשלום לגרסת ה SQL Express יש אפשרות לעבוד עם מה שנקראה Dynamic Instances או בשם אחר User Instances. זו שיטה מאוד לא מומלצת לדעתי! מה גם שבאפליקציה חיה אתה ככל הנראה תעבוד עם מסד נתונים שמוגדר בשרת, ולא כזה שיהיה בתקייה של הפרויקט.
בקיצור הרעיון הוא לעזור עם מסד הנתונים בדיוק כמו שעובדים עם כל מסד נתונים אחר בשרת SQL בגרסה אחרת. זה גם יעזור לך להבין את הטעות בדיון בפורום האחר, ולהבין שאם את עובדת עם SQL EPRESS אז את התקנת את השרת (גם אם את לא יודעת שהוא מותקן).
2. אם אתה כבר רוצה מסד נתונים שיהיה חלק מהפרויקט אז SQL Server Express לא מתאים מכיוון שהוא לא חלק מהפרויקט, הוא רק שומר את הקובץ בתקייה של הפרויקט אבל הוא רץ על השרת שמותקן. הדרך לעבודה עם מסד נתונים שהוא חלק מהפרויקט זה לעבוד עם מסדי נתונים מוטבעים (embedded database) באפליקציה כמו sqlite או SQL Server Compact. הה כבר מתקשר לדיון בפורום פיתוח WEB :-) שם יש עוד פרטים בנושא
הקישור הבא יוכל לעזור בדוגמאות של כל האפשרויות של שרשרת התחברות למסד הנתונים SQL מכל הסוגים שלו:
http://www.connectionstrings.com/sql-server-2012/2. בכל מקרה מומלץ להחליף את השימוש בשרת SQL Express המיושן בגישה שלו לשימוש בשרת גרסת ה LocalDB. רשמית מ 2012 זו ההמלצה של מיקרוסופט.
********** מצאתי עוד 2 קישורים מעולים שיכולים לעזור לך ***********
>> http://msdn.microsoft.com/en-us/library/jj653752(v=vs.110).aspx
קישור מעולה שכולל הסברים על שרשרת ההתחברות כולל האשרויות השונות. פחות דוגמאות מהקישור ששמתי מעל אבל יותר הסברים מעולים.
קישור מעולה על כל המאפיינים של המחלקה SqlConnection.ConnectionString. ניתן גם לראות בקישור את ההברל על שימוש במסלול מוחלט או מסלוול יחסי בשרשרת ההתחברות במאפיין של AttachDBFilename
Ronen Ariely
[Personal Site] [Blog] [Facebook]- נערך על-ידי pituachMVP, Moderator יום ראשון 30 נובמבר 2014 21:51
- סומן כתשובה על-ידי Eran Sharvit יום שלישי 02 דצמבר 2014 09:04
-
שלום רונן, קודם כל תודה על ההתייחסות ועל התשובות המפורטות
ציטוט:
" אם אתה כבר רוצה מסד נתונים שיהיה חלק מהפרויקט אז SQL Server Express לא מתאים מכיוון שהוא לא חלק מהפרויקט, הוא רק שומר את הקובץ בתקייה של הפרויקט אבל הוא רץ על השרת שמותקן. הדרך לעבודה עם מסד נתונים שהוא חלק מהפרויקט זה לעבוד עם מסדי נתונים מוטבעים (embedded database) באפליקציה כמו sqlite או SQL Server Compact. "
ישנה אפשרות ליצור תוכנה עם מסד נתונים ללא התקנת SQL או כל שרת אחר חוץ מFRAMEWORK אצל הלקוח?
או אנסח בצורה אחרת: שימוש במסדי נתונים מוטבעים ( כגון SQL SERVER EXPRESS LOCALDB 2012 אינו מחייב התקנה של שרת כלשהו על מחשב הלקוח?
אגב, בנוגע לSQL EXPRESS - בפעם הראשונה ששאלתי בפורום בהקשר לזה, אכן ענית לי תשובה מפורטת וציינת שSQL EXPRESS LOCAL DB 2012 זה אחד מהEMBEDDED DATABASE, אבל כנראה לא הבנתי נכון, ואני חשבתי שSQL EXPRESS שבVS 2012 הוא עצמו כבר LOCAL DB. וזה לא שני דברים נפרדים. -
אהלן לאה,
אני לא ממש מבין מה השאלות שנaארו פתוחות :-)
אבל יש נקודה שעדיין לא מדוייקת. LOCALDB הוא לא מסד נתונים נתונים מוטבע. מסד הנתונים המוטבע של מיקרוסופט נקרא SQL Server Compact. לכן שימוש ב SQL Server Compact מאפשר לך לפתח אפליקציה בלי שהלקח יצתרך התקנה של דברים נוספים.SQL SERVER EXPRESS LOCALDB מחייב התקנה.
SQL SERVER EXPRESS מחייב התקנה.
SQL Server Compact לא מחייב התקנה, והוא מוטבע באפליקציה.
Ronen Ariely
[Personal Site] [Blog] [Facebook]- סומן כתשובה על-ידי lea_b יום חמישי 04 דצמבר 2014 08:28