C# 数据优先法中的验证

C# 数据优先法中的验证,c#,asp.net-mvc-4,entity-framework-4,C#,Asp.net Mvc 4,Entity Framework 4,我正在使用MVC4和实体框架实现一个项目 我使用数据优先的方法。我正在为各种业务逻辑的模型实现一个分部类 我的问题是如何对属性设置验证规则。如下图所示 [Required] public string FirstName { get; set; } 如果我在属性(实体框架生成模型)上手动添加此代码“[必需]”。 然后,如果我需要更改数据库更改的模型。然后我所有的验证规则都消失了 如果不使用代码优先的方法,我如何解决这个问题。正如您所发现的,您永远不应该编辑生成的文件,因为在重新生成文件时更改会

我正在使用MVC4和实体框架实现一个项目

我使用数据优先的方法。我正在为各种业务逻辑的模型实现一个分部类

我的问题是如何对属性设置验证规则。如下图所示

[Required]
public string FirstName { get; set; }
如果我在属性(实体框架生成模型)上手动添加此代码“[必需]”。 然后,如果我需要更改数据库更改的模型。然后我所有的验证规则都消失了


如果不使用代码优先的方法,我如何解决这个问题。

正如您所发现的,您永远不应该编辑生成的文件,因为在重新生成文件时更改会丢失

与将实体用作视图模型相比,更好的体系结构是在视图和实体之间插入单独的视图模型。视图模型应该与视图的需求紧密对应,并且经常从几个底层实体检索数据

然后,属性将显示在视图模型属性上,而不是实体上

视图模型还可以弥补应用程序中存在大量分配漏洞的风险,如果在实体中使用延迟加载,这些漏洞尤其危险。

另一种解决方法(使用CodeFirst)是使用流畅的验证。CustomerValidator将始终指向重新生成的Customer类(除非您明显更改Customer类名称)

使用FluentValidation;
公共类CustomerValidator:AbstractValidator{
公共客户验证人{
RuleFor(customer=>customer.name).NotNull();
}
}
using FluentValidation;

public class CustomerValidator : AbstractValidator<Customer> {
  public CustomerValidator {
    RuleFor(customer => customer.Surname).NotNull();
  }
}