C# 禁止System.CompositionModel.DataAnnotation生成db scema,而仅将其用于非结构化的jquery验证
我想使用System.CompositionModel.DataAnnotation来构建模型,但它不应该影响数据库架构。例如,如果我使用的是C# 禁止System.CompositionModel.DataAnnotation生成db scema,而仅将其用于非结构化的jquery验证,c#,asp.net-mvc,entity-framework,data-annotations,unobtrusive-validation,C#,Asp.net Mvc,Entity Framework,Data Annotations,Unobtrusive Validation,我想使用System.CompositionModel.DataAnnotation来构建模型,但它不应该影响数据库架构。例如,如果我使用的是Required,则它不应该使该列在数据库中不可为null。我想使用数据注释的原因是为了MVC4jQuery的非结构化验证 到目前为止,我已经通过使用 @Html.TextBoxFor(model => model.BookingRequest.Email, new { data_val = "true", data_val_required = "
Required
,则它不应该使该列在数据库中不可为null。我想使用数据注释的原因是为了MVC4jQuery的非结构化验证
到目前为止,我已经通过使用
@Html.TextBoxFor(model => model.BookingRequest.Email, new { data_val = "true", data_val_required = "Please provide Special Notes" })
我认为这不是执行验证的最佳实践或标准方法
我想把我的模型改成这样
[Required]
public string Email { get; set; }
public string CustomerName { get; set; }
public string ContactNumber { get; set; }
因此,在TextAreaFor中生成html元素时,我不需要传递html属性,但在数据库中,它应该可以为空
我这样做的原因是有另一个服务使用相同的上下文,但它不提供电子邮件的价值。我不想改变已经运行的服务
我使用EntityTypeConfigurtaion(Fluent API)而不是DataAnnotation来配置模型
提前感谢您抽出时间回顾我的问题。从您的解释中不太清楚您使用的是哪种EF方法,以下是我对使用实体框架的DB first方法的解决方案: 添加验证属性,即Dataanotation,其属性与要在模型数据库中使用的属性相同
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; }
}
并创建一个具有相同模式名称的分部类,并添加元数据属性以使用上述类
[MetadataType(typeof(XContent))]
public partial class YourModelClassName
{
public string FullName { get; set; }
}
总之
您必须添加两个类,一个用于映射两个类
第二,它实际上包含数据注释
我希望这有帮助 好主意是将数据库模型和视图模型分开。。。。并编写一个转换器,将视图模型转换为数据库模型。它需要更改数据库架构,这不是问题中提到的首选方法。您使用的是哪种ef方法?:),我在这里解释的方法适用于DB first(首先对代码不确定),请看这里:您可以看到我使用的是fluent api。指出代码优先的方法还不够吗。