Disable System.CompositionModel.DataAnnotation from generating db scema instead use it just for unobstrusive jquery validation

扶醉桌前 提交于 2019-12-10 12:24:35

问题


I want to use System.CompositionModel.DataAnnotation for building Model but it should not affect database schema for example if I am using Required then it should not make that column as not nullable in Database. The reason I want to use Data annotation is for MVC 4 JQuery Unobstrusive validation.

As of Now I have applied validation by using

@Html.TextBoxFor(model => model.BookingRequest.Email, new { data_val = "true", data_val_required = "Please provide Special Notes" })

I think this is not best practice or standard way to performing validation.

I want to change my model to something like this.

[Required]
public string Email { get; set; }
public string CustomerName { get; set; }
public string ContactNumber { get; set; }

so that I don't need to pass html attribute while generating the html element in TextAreaFor but in database It should be nullable.

The reason why I am doing this is there is another service which is using same context but it does not provide the email value. And I don't want to change already running services.

I am using EntityTypeConfigurtaion(Fluent API) instead of DataAnnotation for configuring model.

Thanks in advance for your time to review my question.


回答1:


Its not very clear from your explanation which EF approach you are using , here is my solution to DB first approach with entity framework :

add your validation attributes aka Dataanotation with same properties you are going to use in model-db

  public partial class XContent
    {
        [Required(AllowEmptyStrings = false, ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resource))]
        [RegularExpression(@"^[a-zA-Z]+$", ErrorMessageResourceName = "UseLettersOnly", ErrorMessageResourceType = typeof(Resource))]
        public string FullName { get; set; }
}

and create a partial class with same modal name and add metadata attribute to use above class

    [MetadataType(typeof(XContent))]
    public partial class YourModelClassName
    {
        public string FullName { get; set; }
    }

so in an all

you have to add two classes one for mapping two classes and second which actually contains data-annotations

I hope that helps !!



来源:https://stackoverflow.com/questions/26352719/disable-system-compositionmodel-dataannotation-from-generating-db-scema-instead

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!