אילוץ מספר תעודת זהות או מספר דרכון
-
בטבלת לקוחות יש לי שתי עמודות אחת לתעודת זהות ואחת למספר דרכון בשביל מי שאין לו תעודת זהות כדי ל'אלץ' תקינות נתונים הוספתי אילוץ עם ביטוי כזה:
([TZ] IS NOT NULL AND len([TZ])=(9) OR [Passport] IS NOT NULL AND len([Passport])>=(9))
עד כאן זה מצויין, הבעיה כאשר EF Code First המיר את הטבלה לקוד, אין בקוד שום רמז לאילוץ הנ"ל
ולכן יש לי שתי שאלות:- האם EF לא יודע להמיר אילוצים?
- מה לעשות כדי שהאילוץ הנ"ל יופיע בקוד? האם אפשר להשתמש באיזו שהיא צורה ב DataAnnotations?
פורסם במקור בפורום CODE613 ב07/08/2016 14:25 (+03:00)
-
- בקוד פירסט מתחילים מהקוד, ואתה התחלת מהDB. לגיטימי, אבל לשאול אם הוא לא יודע להמיר זה שאלה מפותלת, הוא הרי לא ממיר כלום, אדרבא הוא יוצר DB.
- ברור. במקרה שלך הייתי מגדיר שיש חוק לכל שדה של אורך, ויש חוק שאחד משתיהם חייב להיות מאוכלס. הכי קל לעשות זאת ע"י אימות ברמת המודל:
http://stackoverflow.com/a/16100455/1271037
שים לב שאי לזה תמיכה אוטומטית לצד הלקוח (JS).
ישנה מחלקה שמקילה על העבודה בשם FluentValidation והיא גם תומכת במגוון תרחישי צד לקוח, אבל אני לא יודע אם לכזה מקרה (לפחות שדה אחד מתוך X נדרש).
פורסם במקור בפורום CODE613 ב07/08/2016 21:21 (+03:00)
-
-
בקוד פירסט יש גם אפשרות ליצור קוד מדטה ביס קיים ראה כאן וזה מה שאני עשיתי.
-
איך אני מיישם את הדרך שהבאת בדטה גריד של WPF? יש לי שם ValidationRule שאני מגדיר בבינדיג של כל עמודה, ואין ל-ValidationRule אפשרות לדעת מה קורה בעמודה אחרת.
עשיתי נסיון, ומימשתי במחלקה עם התעודת זהות והדרכון את הממשק IDataErrorInfo אבל מה שקרה שמיד שהמשתמש פותח רשומה חדשה בדטה גריד התאים הופכים לאדומים עוד לפני שהוא הספיק להזין משהו.
פורסם במקור בפורום CODE613 ב07/08/2016 22:54 (+03:00)
-
-
- תראה המטרה היא שהמשתמש יקבל צבע אדום בתאים של תז והדרכון כאשר הוא משאיר את שניהם ריקים אבל לא מיד שהוא פותח רשומה חדשה, אז יש פה שני שלבים יש את השלב שבתוך הקוד מסמנים את הדרישות כדי שמאפיין מסויים יהיה תקין וזה עושים עם DataAnnotations ויש את השלב שפקדים עם הבינדינגים בודקים את התקינות של נתונים
DataAnnotations פותר את השלב הראשון אבל בשלב השני אני נתקע
IDataErrorInfo פותר את שני השלבים בבת אחת אבל יש לו את הבעיה שמיד שפותחים רשומה חדשה הוא מוציא שגיאה
פורסם במקור בפורום CODE613 ב08/08/2016 13:19 (+03:00)
- תראה המטרה היא שהמשתמש יקבל צבע אדום בתאים של תז והדרכון כאשר הוא משאיר את שניהם ריקים אבל לא מיד שהוא פותח רשומה חדשה, אז יש פה שני שלבים יש את השלב שבתוך הקוד מסמנים את הדרישות כדי שמאפיין מסויים יהיה תקין וזה עושים עם DataAnnotations ויש את השלב שפקדים עם הבינדינגים בודקים את התקינות של נתונים
-
כן לפי הנוסח ששאלתי הכל נענה [אבל למעשה אני עדיין בבעיה, אני חשבתי שאם יהיה לי DataAnnotations אני יהיה מסודר כי אני אבדוק עם ValidationRule אם הערך שהבינדינג שולח לבדיקה תואם ל DataAnnotations אבל מה שהתברר שזה טוב כאשר אני בודק ערך בודד אבל במקרה שלי צריך לבדוק שני ערכים והבינדיג מביא לי לבדיקה רק ערך אחד.]
והנה המימוש
Public Class Castomer Implements IDataErrorInfo <StringLength(9, MinimumLength:=9)> Public Property TZ As String <StringLength(20, MinimumLength:=9)> Public Property Passport As String Public ReadOnly Property [Error] As String Implements System.ComponentModel.IDataErrorInfo.Error Get Return Nothing End Get End Property Default Public ReadOnly Property Item(columnName As String) As String Implements System.ComponentModel.IDataErrorInfo.Item Get If columnName = "TZ" OrElse columnName = "Passport" Then If TZ <> "" Then Return "" If Passport <> "" Then Return "" Return "יש לציין או תעודת זהות או מספר דרכון !" End If Return "" End Get End Property End Class
יישר כח גדול על המאמץ לעזור לי!
פורסם במקור בפורום CODE613 ב08/08/2016 13:49 (+03:00)