entity framework+validation注释

我想使用validationanotation。 我已经有一个由entity framework实现的模型。 我需要数据validation,我知道有一个非常好的数据anotation …但我真的不知道如何使用它与entity framework正确。

我应该编辑实体吗? 或者我应该写分开的课程? 或者我应该编写从实体inheritance的类?

你能告诉我应该用的最佳方法吗?

我想写尽可能少的代码。

处理此问题的方法是部分类和特殊属性的组合,允许您将元数据附加到另一个类。

entity framework已经通过将所有类生成为部分类来帮助您。 因此,如果您的模型中有一个名为Settings的实体,那么EF会创建:

public partial class Setting : INotifyPropertyChanging, INotifyPropertyChanged { // Auto-gen Properties, methods, etc go here. } 

这意味着您可以在其他文件中包含任意数量的其他partial class Setting片段,如果/当您重新生成该代码时,EF将不会触摸该片段。 如果要向其添加数据validation属性,则需要两个步骤:

  1. 将MetadataType属性附加到Setting类。 在这个部分类片段的主体中不需要任何东西,它只是与属性相关联。

     [MetadataType(typeof(SettingMetadata))] public partial class Setting { } 
  2. 创建第二个类,其具有与EF类相同的公共字段名称,并关联所需的任何数据validation属性。 编译器将按名称将元数据类字段与EF类字段进行匹配,并且无论您的第二个类附加到第二个类的元数据也在您的第一个类上。

     public class SettingMetadata { [Display(Name="Base Rate")] [Required] public decimal Rate { get; set; } [Display(Name = "Permit Payments")] public Boolean AllowPayments { get; set; } [Display(Name = "Base URL For Web Service")] [Required] [SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings", Justification = "Type must match linked metadata type.")] public string WebServiceUrl { get; set; } } 

如FxCop抑制消息中所述,字段的名称和类型必须在元数据类和关联类之间匹配才能生效。

数据注释是您需要添加到实体属性的validation器属性。 有许多标准属性,或者如果它们不能满足您的需求,您可以创建自定义属性。

检查此链接。