טיפ קצר: למה כשעושים Average על עמודה ב DB מקבלים ממוצע שלם, גם כשהתוצאה אמורה להיות עשרונית?

Monday, November 9, 2009

נניח שיש לכם טבלה, עם עמודה הכוללת מספרים שלמים (int).באפליקציה שלכם, שלצורך העניין, משתמשת נניח ב LINQ to SQL או ADO.NET Entity Framework, אתם רוצים לקבל את הממוצע של העמודה הזאת. אתם אומרים לעצמכם שזה לא אמור להיות מורכב בכלל. יש Extension Method לאגרגרציה של נתונים, אחת מהם היא Average. אתם כותבים אפליקציה פשוטה שמריצה אותה ואמורה לעשות את הממוצע של המספרים 1,1,2. התוצאה המצופה היא אחד ושליש. אתם מקבלים אחד. למה? ההסבר פשוט מאד: משפט ה SQL שנוצר כתוצאה משימוש ב Average משתמש בפונקציית T-SQL בשם AVG....
3 תגובות

גרסא חדשה: DTOGenerator – מחולל קוד המייצר Data Transfer Objects על בסיס LINQ to SQL Data Classes ו ADO.NET Entity Framework Model

Wednesday, September 30, 2009

בפוסט הקודם הצגתי את LINQ2DQLDTOCreator, אפליקציה קטנה שמייצרת Data Transfer Objects על בסיס LINQ to SQL Data Classes. היום ביצעתי קצת שיפורים באפליקציה והרחבתי אותה כך שהיא תייצר DTO’s גם ממודל של ADO.NET Entity Framework. האפליקציה הנוכחית כוללת את כל היכולות של האפליקציה הקודמת. כלומר, עדיין ניתן לייצר DTO’s על בסיס LINQ to SQL Data Classes. אבל, עכשיו האפליקציה גם תייצר DTO’s על בסיס entities, כלומר מחלקות עם EdmEntityTypeAttribute. בנוסף, כאשר עובדים מול ADO.NET Entity Framework האפליקציה גם מתייחסת ל relationships בין entities שונים. כלומר, אם במודל מוגדר של entityיש...

פרסום: אפליקציית קוד פתוח קטנה ושימושית ליצירת Data Transfer Objects באופן אוטומטי על בסיס LINQ to SQL Data Classes

Tuesday, September 22, 2009

הקדמה באחד הפוסטים הקודמים כתבתי על Data Transfer Objects והשימוש בהם לעבודה נכונה ונוחה עם LINQ to SQL ו- ADO.NET Entity Framework. בין התגובות שקיבלתי בפורום “תכנות .NET” בתפוז שבתגובה לשאלה שעלתה בו פורסם הפוסט, עלה העניין שלמרות שמדובר בכתיבה יותר נוחה, היא דורשת למעשה עבודה כפולה בהתחלה, וגם ציינתי זאת בפוסט. כשמתחילים לכתוב, יש צורך לכתוב DTO נפרד לכל אחת מהישויות עם תחילת העבודה, וגם בד”כ לכתוב מתודות שמבצעות העברה בין הDTO לאובייקט שנמצא ב DAL (האובייקט שמופה ע”י הORM) ולהיפך – לכתוב מתודה שמחזירה את...
2 תגובות

טיפ לעבודה מול LINQ to SQL ו- ADO.NET Entity Framework: שימוש ב FactoryMethod כדי לקבל מופע של ה DataContext או ה Entities

Sunday, September 13, 2009

כשעובדים מול LINQ to SQL או ADO.NET Entities Framework, אנחנו עובדים הרבה מאד מול אובייקט ה DataContext / Entities. דוגמא מאד נפוצה בדוגמאות ובמדריכים של הטכנולוגיות הללו היא ליצור מופע של המודל בכל מתודה וכל פעם שמשתמשים בו. למשל: 1: public static void Method1() 2: { 3: using (var data = new DataClassesDataContext()) ...
תגובה אחת

SELECT SCOPE_IDENTIFY() עם LINQ to SQL ו- ADO.NET Entity Framework

Tuesday, September 8, 2009

כאשר מוסיפים שורה לטבלה המכילה איזושהי עמודה בשם ID שמוגדרת, לצורך העניין, כ Primary Key, פעמים רבות נרצה לקבל מיד אחרי הוספת הרשומה את ה ID שהוקצה לה. באמצעות T-SQL, זה היה נעשה עם SCOPE_IDENTIFY(), בצורה הזאת: 1: SELECT SCOPE_IDENTIFY() AS זה היה מגיע לאחר ה INSERT, היינו מקבלים את הID וכולם היו שמחים ומאושרים. היום ראיתי דוגמאת קוד שבה מיד לאחר הוספת השורה ב LINQ to SQL וביצוע SubmitChanges, הולכים לבטלה ושולפים את השורה האחרונה בה כדי לקבל את הID. בסופו של דבר,...
תגיות: ,
4 תגובות

סריאליזציה של אובייקטים שיוצרו ע"י LINQ to SQL

Tuesday, November 11, 2008

במצבים מסויימים, נרצה לעשות serialization לאיזשהם אובייקטים שיוצרו ע"י LINQ to SQL. במילים אחרות, לקחת את האובייקטים שמופו מהטבלאות ולעשות להם סריאליזציה, למשל, כדי לשלוח אותם במסגרת Web Service. השגיאה עליה אני מדבר, תקרה בעיקר באובייקטים שמופו שיש להם realationships עם אובייקטים אחרים. ה Exception, ייראה בערך ככה: System.InvalidOperationException: A circular reference was detected while serializing an object of type BL.User. השגיאה הזאת נובעת, בגלל הצורה שבה ממומשים ה realationships בין האובייקטים. כל אובייקט שמופה ויש לו relationship עם טבלה אחרת יש לו property שבו הוא מחזיר את האובייקט אליו הוא מופה. במילים אחרות - באובייקט User יש property...
תגיות: ,
תגובה אחת

סריאליזציה של אובייקטים שנוצרו ע"י LINQ to SQL

במצבים מסויימים, נרצה לעשות serialization לאיזשהם אובייקטים שיוצרו ע"י LINQ to SQL. במילים אחרות, לקחת את האובייקטים שמופו מהטבלאות ולעשות להם סריאליזציה, למשל, כדי לשלוח אותם במסגרת Web Service. השגיאה עליה אני מדבר, תקרה בעיקר באובייקטים שמופו שיש להם realationships עם אובייקטים אחרים. ה Exception, ייראה בערך ככה: System.InvalidOperationException: A circular reference was detected while serializing an object of type BL.User. השגיאה הזאת נובעת, בגלל הצורה שבה ממומשים ה realationships בין האובייקטים. כל אובייקט שמופה ויש לו relationship עם טבלה אחרת יש לו property שבו הוא מחזיר את האובייקט אליו הוא מופה. במילים אחרות - באובייקט User יש property...
תגיות: ,
אין תגובות

LINQ to SQL ומשפט Update

Tuesday, September 23, 2008

דמיינו לכם מצב תיאורטי. יש לכם מתודה, שהתפקיד שלה הוא לעדכן מסד נתונים שעובד עם LINQ to SQL. אתם רוצים לקבל איזשהו אובייקט שאמור להחליף ישות קיימת ב DB. למשל, יש לנו את האובייקט User שמציין ישות מהDB, ואנחנו רוצים מתודה שתקבל אובייקט User שהוא זה שקיים עכשיו ואובייקט User שהוא החדש, שאמור להחליף אותו, ואנחנו רוצים לעדכן באמצעות LINQ to SQL. בכל הדוגמאות, רואים שאתה משנה את ה properties של האובייקט בתוך ה context של ה DataContext, וכאשר אתה עושה SubmitChanges מזוהים השינויים והעדכון מתבצע. הדבר הזה מתבצע למעשה באמצעות כך, שכל פרופרטי שנמצא כחלק מישות שמופתה ממסד...
תגיות: ,
אין תגובות

LINQ to SQL והדרך שבה הוא עובד עם Stored Procedures

Tuesday, July 22, 2008

LINQ to SQL הוא כלי מאד נוח. ממש נוח. אבל, יש לו כמה מגבלות, והוא לא תמיד מאד חכם.בואו נניח שיש לנו בדטאבייס איזשהו stored procedure, נניח, שמו X. כאשר, ה SP הזה, בסיומו, מריץ איזשהו משפט SELECT, שמחזיר ערכים, שמולם אני רוצה לעבוד מהקוד. כאשר אני מוסיף את הSP ל L2SQL, בתהליך המיפוי, נוצר לי אובייקט בשם XResults, שמייצג את מבנה התוצאות שחוזר, ואיתו אפשר לעבוד. עכשיו, בואו נניח שיש לנו Stored Procedure קצת יותר מסובך. כזה שבאמצע, יוצר איזושהי טבלה זמנית, ממלא אותה בנתונים, בסיומו שולף ממנה נתונים ועושה לה drop.אז, הוספנו אותו ל LINQ to SQL,...
תגיות:
תגובה אחת

הדרך הקצרה ליצור שכבת לוגיקה עסקית מבוססת על LINQ to SQL

Tuesday, February 12, 2008

LINQ to SQL זה שמה של טכנולוגיית גישת-הנתונים החדשה של מיקרוסופט. מי שלא מכיר, יכול לצפות ב webcasts שהקלטתי עליה בעבר (1 2). אם צריך לסכם את LINQ to SQL בשלושה מילים, ובהגדרה הכי כללית שאפשר, אלה יהיו קרוב לוודאי Data Access Layer. כלומר, שכבת העבודה עם נתונים של האפליקציה. מעל השכבה הזאת, צריכה לבוא שכבת הלוגיקה העסקית. לעיתים, באפליקציות שאין הרבה לוגיקה עסקית, עיקר הלוגיקה מהווה למעשה ה DAL. במצב כזה, עיקר הלוגיקה יהיה וואלידציה של הנתונים שנכנסים ויוצאים, ואולי תוספת מועטה של פונקציונאליות. במצב כזה, הדרך הכי קצרה ליצור...
תגיות: ,
2 תגובות