הכירו את Entity Framework 4.1

מבוא

לאלו שלא מכירים, ADO.Net Entity Framework (בהמשך EF) היא המילה האחרונה בתחום הORM מבית מיקרוסופט. EF מאפשר למפתחים להגדיר בצורה נוחה את עולם הישויות שלהם (Conceptual Model) את הטבלאות שלהם (Storage Model) ואת המיפוי ביניהם (Mapping Model) כששלשתם יחד יוצרים את הEDM (ר"ת Entity Data Model). כמו"כ הוא מספק את הממשקים הן לאחזור ישויות מבסיס הנתונים והן לעדכון ושמירה שלהם לבסיס הנתונים בחזרה.

כמו ששמתם לב, בעולם המושגים של EF, המחלקות אינן מייצגות רשומות במסד הנתונים, אלא הנן "ישויות" הממופות לנתונים באמצעות הEDM. בדרך זו, כל ישות יכולה להיות ממופה ליותר מטבלה אחת, וכן לדוגמה להשתמש בStored Procedure לפעולות CRUD (ר"ת Create, Read, Update, Delete).

אם טרם יצא לכם לעבוד עם EF תוכלו להכיר את היסודות דרך המאמרים המצוינים של עידו פלטו "הכירות עם EF" וסדרת המאמרים של הרה"ג דוט נט המתאימה במיוחד ללימוד עצמי.

מה התחדש בEF 4.1?

החידושים שבגרסה החדשה כולם נשענים על הAPI החדש שחושפות המחלקות  System.Data.Entity.DbContext וSystem.Data.Entity.DbSet (את הרשימה המלאה תוכלו למצוא בMSDN).

אחד השיפורים המשמעותיים ביותר בEF 4.1 הוא תמיכה בגישת Code First. גישת Code first מאפשרת להגדיר את המודל כולו במחלקות C# או VB.NET רגילות ולהוסיף או לשנות קשרים בין מחלקות ע"י שימוש בAPI של DbContext. והחשוב מכל, EF יידע לבד ליצור מסד נתונים המתאים לשדות והקשרים שהגדרתם באמצעות המחלקות. עוד...

קטגוריות: .NET 4.0

הכירו את IIS URL Rewrite 2.0

URL Rewriteתהיתם פעם איך ניתן לשפר את חווית המשתמש ודירוגו של אתר קיים בנועי החיפוש בלי לבצע שינויים נרחבים לאתר כולו? איך לשמר כתובות ישנות של דפים שלאחר שדרוג עברו לכתובת חדשה בלי לזהם את הקוד החדש במידע אודות הכתובות הישנות?

הכירו את IIS URL Rewrite 2.0! בשונה מהגרסה הקודמת, שידעה בעיקר לתרגם כתובות מתחת לפני השטח, הגרסה החדשה מהווה חבילת פתרונות שיכתוב וניתוב עשירה עם ממשק ניהול מוטמע בממשק הIIS. כעת, נדרשים רק קליקים ספורים כדי לבצע פעולות שיכולות לשדרג משמעותית את האתר, הן עבור הגולשים – שיקבלו כתובות URL הגיוניות, והן מבחינת מנועי החיפוש ע"י ביטול תוכן כפול, והכנסת מילות מפתח לURL עצמו. עוד...

קטגוריות: .NET | .NET 4.0 | IIS | Tools

מגזין אינטרנט חדש מבית פרוג

אני שמח לבשר על שהתחלתי לכתוב טור בנושא ASP.NET עבור הירחון האינטרנטי מבית פרוג!

אשתדל לצרף כאן לינקים למאמרים כשאלו יתפרסמו.

הנושא הראשון שבחרתי הוא ASP.NET וSEO:

קטגוריות: .NET 4.0 | Tools | פרוג
תגיות: , , ,

איך ניתן לבדוק האם המחרוזת היא עברית?

לפעמים כשאנחנו שולפים טקסט מהמסד נתונים אנו מוצאים את עצמינו מתלבטים האם להציג אותו בדף כltr או כrtl.

כמובן, ניתן לבדוק:

אבל כל זה עדיין לא ייתן מענה למחרוזות מעורבות כדוגמת אלו:

  • האות הראשונה בא"ב האנגלי היא 'a'.
  • 'a' היא האות הראשונה בא"ב האנגלי.
  • the first latter of the hebrew abc is 'א'.
  • 'א' is the first latter of the hebrew abc.

הפתרון שנראה לי אינטליגנטי יותר, מבוסס על רוב התווים ה"חזקים": אם הרוב הוא עברי אזי המחרוזת נחשבת עברית אם לא – לא. במקרה של תיקו, האלגוריתם יקבע ע"פ האות החזקה הראשונה.

הסיבוכיות של האלגוריתם קטנה מO(n) שכן, הוא מסתיים ברגע שניתן להוכיח רוב תווים לצד זה או אחר, לדוגמה במחרוזת "אבגab" התוים "ab" כלל לא ייבדקו כי גם אם הן לא עבריות המחרוזת כבר מוכחת כעברית.

המתודה:

 public  static  bool  IsHebrewString(this  string  value)
 {
     int  balance = 0;
     int  firstLetter = 0;
 
     for  (int  i = 0; i < value.Length; i++)
     {
         if  (char .IsLetter(value[i]))
         {
             if  ((value[i] >= (char )0x5D0) && (value[i] <= (char )0x5EA))
                 balance++;
             else 
                 balance--;
 
             if  (firstLetter == 0)
             {
                 firstLetter = balance > 0 ? 1 : -1;
             }
         }
 
         if  ((value.Length - (i + 1)) < Math .Abs(balance))
             break ;
     }
 
     if  (balance == 0)
         return  firstLetter > 0;
 
     return  balance > 0;
 }
 

הנה כמה דוגמאות ליעילות האלגוריתם:

 bool  test1 = "האות הראשונה בא\"ב האנגלי היא 'a'." .IsHebrewString(); // true 
 bool  test2 = "'a' היא האות הראשונה בא\"ב האנגלי." .IsHebrewString(); // true 
 bool  test3 = "the first latter in hebrew abc is 'א'." .IsHebrewString(); // false
 bool  test4 = "'א' is the first latter in hebrew abc." .IsHebrewString(); // false 
 bool  test5 = "אבגabc" .IsHebrewString(); // true 
 bool  test6 = "abcאבג" .IsHebrewString(); // false 
 bool  test7 = "()!^." .IsHebrewString(); // false 
 
קטגוריות: .NET | .NET 4.0 | Tools

חישוב גודל התגיות ב"ענן תגיות"

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

מה שחסר כאן זה ניסוח מתמטי פשוט:

Untitled-2_1

  • score -  הוא ערך "הניקוד" של התגית
  • minScore – הוא הערך של הניקוד הקטן ביותר שקיים
  • maxScore - הוא הערך של הניקוד הגבוה ביותר שקיים
  • minSize – הוא הערך של הפונט הקטן ביותר שתרצה להציג (הוא יוצב לתגית בעלת הניקוד הנמוך ביותר)
  • maxSize - הוא הערך של הפונט הגדול ביותר שתרצה להציג (הוא יוצב לתגית בעלת הניקוד הגבוה ביותר)

ערך הניקוד יכול להיות כל דבר שתרצו: מספר צפיות, דירוג ממוצע, מספר אייטמים המקושרים לתגית וכדו', זה לא משנה למשוואה.

הקוד הבא הוא מימוש של המשוואה הזו בC# 4.0: (לVS2008 ראה בהמשך)

 public  static  double  CalculateTagSize(double  score, double  minScore, double  maxScore, double  minSize, double  maxSize)
 {
     Contract .Requires<ArgumentOutOfRangeException >(minScore < maxScore, 
         "minScore must be smaller than maxScore." );
     Contract .Requires<ArgumentOutOfRangeException >(minSize < maxSize, 
         "minSize must be smaller than maxSize." );
     Contract .Requires<ArgumentOutOfRangeException >(score > minScore && score < maxScore, 
         "score must be greater than minScore and smaller than maxScore." );
 
     return  minSize + ((maxSize - minSize) * (score - minScore)) / (maxScore - minScore);
 }

בVS2008 של ניתן לעשות את הבדיקות באמצעות הContracts אז נשתמש במשפטי if וזריקת חריגות:

 public  static  double  CalculateTagSize(double  score, double  minScore, double  maxScore, double  minSize, double  maxSize)
 {
     if  (!(minScore < maxScore))
         throw  new  ArgumentOutOfRangeException ("minScore must be smaller than maxScore." );
     if  (!(minSize < maxSize))
         throw  new  ArgumentOutOfRangeException ("minSize must be smaller than maxSize." );
     if  (score < minScore || score > maxScore)
         throw  new  ArgumentOutOfRangeException ("score must be greater than minScore and smaller than maxScore." );
 
     return  minSize + ((maxSize - minSize) * (score - minScore)) / (maxScore - minScore);
 }

תיוג נעים לכולכם…

קטגוריות: .NET | .NET 4.0
תגיות: ,

Covariance and Contravariance in C# 4.0

גם אני כשנתקלתי לראשונה במושגים covariance וcontravariance הייתי מבולבל למדי בעצמי. אבל, מסתבר שלאחר הסבר קצר אלו בסך הכל מונחים למושגים שכולנו מכירים טוב מאוד. מושגי הvariance שאולים במקור מהתפלגות סטטיסטית במתמטיקה, שם השונות המשותפת (variance) היא מדד לקשר בין שני משתנים מקריים. השונות המשותפת חיובית כאשר המשתנים נוטים לסטות באותו כיוון, מעל או מתחת לממוצע, ושלילית כאשר הם משתנים בכיוונים מנוגדים זה לזה. משם הושאל המינוח למדעי המחשב, וליתר דיוק למינוח האפיון של שפות תכנות.

נניח מערכת טיפוסים בה קיים הטיפוס Animal וטיפוס Elephant היורש ממנו:

 class  Program 
 {
     public  class  Animal  { }
     public  class  Elephant  : Animal  { }

}

במערכת טיפוסים זו המרה מטיפוס אחד למשנהו נחשבת:

  • covariant – כשממירים טיפוס כללי יותר לטיפוס מצומצם יותר לדוגמה: מAnimal לElephant.
  • contravariant – כשממירים טיפוס מצומצם יותר לטיפוס כללי יותר לדוגמה: מElephant לAnimal.
  • invariant – כשממירים בין שני טיפוסים שאינם קשורים לדוגמה: מProgram לAnimal. עוד...
קטגוריות: .NET 4.0
תגיות:

Named and Optional Arguments in C# 4.0

ארגומנטים אופציונאליים והצבת ארגומנטים לפי שם

בC# 4.0 נוספה אפשרות להעביר ערך לארגומנט של מתודה בשמו (arg: "value") ולאו דווקא בסדר מסוים. אפשרות זו חיונית כדי לאפשר אפשרות חדשה נוספת שהיא - ארגומנטים אופציונאליים. הקוד הבא ממחיש העברה של הערך 1 לארגומנט ,copies את הערך"COLOR" לארגומנט ColorMode, ואת הערך "readme.txt" לארגומנט DocumentName:

 Print(copies: 1, colorMode: "COLOR" , documentName: "readme.txt");
 static  void  Print(string  colorMode, string  documentName, int  copies) {...}

ארגומנטים אופציונאליים מוכרזים בC# על ידי ציון ערך ברירת המחדל עבור הארגומנט: עוד...

קטגוריות: .NET 4.0
תגיות: ,

מה חדש בNet Framework 4.0. וVisual Studio 2010?

בסדרת המאמרים הבאה אכתוב על החידושים שמחכים לנו בגרסא החדשה של Net Framework. וVisual Studio. המאמר הזה ישמש כמפתח לסדרה, וככל שאעלה מאמרים חדשים אעדכן את הלינקים במפתח.

בסדרה זו אשתדל להיכנס לסיבות שהביאו להוספת כל אחת מהאפשרויות וכן להביא דוגמאות קוד ותסריטי שימוש לאפשרויות החדשות.

NET Framework 4.0.

 

  • CLR
  • BCL
    • Parallel Extensions
    • BigInteger
    • Variance annotations
    • Tuples
    • SortedSet<T>
    • שיפורים בFile System Enumeration
    • MemoryMappedFiles
    • שיפורים בעבודה עם Registry
    • עדכון מידע לUnicode 5.1
    • שיפורים בResourceManager
    • שיפורים בCompression
    • Corrupted State Exceptions
    • מחלקות אוספים Thread-Safe
  • ADO.NET
    • Persistence Ignorant Objects (POCOs)
    • Deferred Loading of Related Objects
    • מתודות של LINQ to Entities Queries
    • התאמה אישית של יצירת Object Layer Code
    • Model-First Support
    • Complex Type Support
  • ASP.NET
    • שיפורים בליבה
    • אפשרות להציב תגיות meta
    • יותר שליטה בview state
    • תמיכה של ASP.NET routing עבור Web Forms
    • יותר שליטה ביצירת הID
    • תמיכה בסינון עבור פקדי data source
    • קבצי Web.Config נקיים
  • WPF
    • פקדים חדשים: DataGrid, Calendar, DatePicker
    • תמיכת Multi-touch
    • פונקציות Easing

Visual Studio 2010

 

  • C# 4.0
  • IDE
    • חלונית Call Hierarchy
    • חלונית Navigate To feature
    • הדגשת הפניות
    • יצירת קוד על ידי שימוש
    • תמיכה של צריכה קודם הכרזה על ידי הIntelliSense
    • התאמה של חלקי שורה וראשי תיבות ע"י הIntelliSense
    • תמיכה בריבוי צגים באמצעות ניתוק חלוניות
    • HTML / ASP.NET / JavaScript Code Snippets
קטגוריות: .NET 4.0
תגיות: