اعتبارسنجی در Entity framework Code first قسمت اول
نویسنده: ایمان محمدی
تاریخ: ۱۳۹۱/۰۵/۱۳ ۱:۳
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
برای درک بهتر موضوع به ساختار کلاسهای اعتبارسنجی در تصویر بعدی دقت کنید.
1.Property
2.Entity
3.Context
[Required(ErrorMessage = "لطفا نام نویسنده را مشخص نمائید")]
public string AuthorName { set; get; }
[StringLength(100,MinimumLength=3,ErrorMessage="حداقل سه حرف و حداکثر 100 حرف وارد نمایید.")]
public string AuthorName { set; get; }
Validation Attributes AssemblySystem.ComponentModel.DataAnnotations.dll NamespaceSystem.ComponentModel.DataAnnotations StringLength RegularExpression DataType Required Range CustomValidation
Mapping Attributes AssemblyEntityFramework.dll NamespaceSystem.ComponentModel.DataAnnotations Key Column,Table ComplexType ConCurrency TimeStamp DatabaseGenerated ForeignKey InverseProperty MaxLength MinLength NotMapped
public class Blog : IValidatableObject
{
public int blogID { set; get; }
[Required(ErrorMessage = "لطفا عنوان وبلاگ را مشخص نمائید")]
public string Title { set; get; }
[Required(ErrorMessage = "لطفا نام نویسنده را مشخص نمائید")]
[StringLength(100,MinimumLength=3,ErrorMessage="حداقل سه حرف و حداکثر 100 حرف وارد نمایید.")]
public string AuthorName { set; get; }
public IEnumerable<ValidationResult> Validate(ValidationContext ValidationContext)
{
if (this.AuthorName =="بدون نام")
yield return new ValidationResult
("این نام برای نام نویسنده مجاز نمیباشد.", new[] { "AuthorName"});
if (this.AuthorName == this.Title)
yield return new ValidationResult
(" نام نویسنده وبلاگ و عنوان وبلاگ نمیتواند همسان باشد.!", new[] { "AuthorName", "Title" });
}
}
protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, System.Collections.Generic.IDictionary<object, object> items)
{
return base.ValidateEntity(entityEntry, items);
}
// اعتبار سنجی یک خاصیت ICollection<DbValidationError> ValidationProperty = Context.Entry(Blog).Property(p => p.AuthorName).GetValidationErrors(); // اعتبار سنجی یک موجودیت DbEntityValidationResult ValidationEntity = Context.Entry(Blog).GetValidationResult(); // اعتبار سنجی همه موجودیتها IEnumerable<DbEntityValidationResult> ValidationContext = Context.GetValidationErrors();
EntityState.Added || EntityState.Modified
سلام؛ من دارم با wpf کار میکنم و همین طور که میدونید در این تکنولوژِی اعتبار سنجی خوبی داره حالا سوال من اینه که چطور میتونم اعتبار سنجی EF 5 رو با اعتبار سنجی WPF تلفیق کنم و چیز جامع و یکپارچه ای ازش در بیاد
public abstract class DataErrorInfo :ObservableObject, IDataErrorInfo
{
[Browsable(false)]
public string Error
{
get
{
var errors = ValidationHelper.GetErrors(this);
return string.Join(Environment.NewLine, errors);
}
}
public string this[string columnName]
{
get
{
var errors = ValidationHelper.ValidateProperty(this, columnName);
return string.Join(Environment.NewLine, errors);
}
}
} public class ValidationHelper
{
public static IList<ValidationResult> GetErrors(object instance)
{
var res = new List<ValidationResult>();
Validator.TryValidateObject(instance,
new ValidationContext(instance, null, null), res, true);
return res;
}
public static IList<ValidationResult> ValidateProperty(object value, string propertyName)
{
if (string.IsNullOrEmpty(propertyName))
throw new ArgumentException("Invalid property name", propertyName);
var propertyValue = value.GetType().GetProperty(propertyName).GetValue(value, null);
var results = new List<ValidationResult>();
var context = new ValidationContext(value, null, null) { MemberName = propertyName };
Validator.TryValidateProperty(propertyValue, context, results);
return results;
}
}سلام خسته نباشید
قسمت دوم این مقاله رو ننوشتین تو سایت؟
خیلی خوبه و من واقعا بهش احتیاج دارم چون دارم الگوی Repositor,Uow رو پیاده سازی میکنم و تو اعتبار سنجی هاش به مشکل خوردم و نمیدونم تو یه بیزینس بزرگ چجوری باید اون رو پیاده سازی کرد که به مشکل نخوره
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class RequierdٍExAttribute : ValidationAttribute
{
public RequierdٍExAttribute(string ErrorMessage)
: base()
{
this.ErrorMessage = ErrorMessage;
}
public override bool IsValid(object value)
{
if (value == null) return false;
return true;
} - کاری که میخوای، منطقا زیر سؤاله. هم قرار نال پذیر باشه. هم کاربر باید اجبارا پرش کنه! یعنی چی اینکار؟!
- در مورد ویژگیهای اعتبار سنجی سفارشی و مدیریت کدهای سمت کلاینت اونها مطلب در سایت موجوده:
طراحی ValidationAttribute دلخواه و هماهنگ سازی آن با ASP.NET MVC