实体框架+验证注释

问题描述

| 我想使用验证注释。 我已经有一个由实体框架实现的模型。 我需要数据验证,而且我知道有一个数据注释非常好... 但是我真的不知道如何在正确的实体框架下使用它。 我应该编辑实体吗?还是我应该写分开的课?还是应该编写从实体继承的类? 您能告诉我最好的使用方式吗? 我想写尽可能少的代码。     

解决方法

处理此问题的方法是结合使用部分类和特殊属性,该属性允许您将元数据附加到另一个类。 实体框架已经通过将所有类生成为部分类来为您提供帮助。因此,如果您的模型中有一个名为“设置”的实体,则EF会创建以下内容:
public partial class Setting : INotifyPropertyChanging,INotifyPropertyChanged
{
    // Auto-gen Properties,methods,etc go here.
}
这意味着您可以在其他文件中包含任意数量的其他“ 1”片段,如果/当您重新生成该代码时,EF不会触摸这些片段。如果要为此添加数据验证属性,则需要两个步骤: 将MetadataType属性附加到Setting类。此局部类片段的主体中不需要任何内容​​,仅是用于关联属性的地方。
[MetadataType(typeof(SettingMetadata))]   
public partial class Setting
{
}
创建与EF类具有相同公共字段名称的第二个类,并关联所需的任何数据验证属性。编译器将按名称将元数据类字段与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禁止消息中所述,字段的名称和类型必须在元数据类和关联的类之间匹配才能起作用。     ,数据注释是需要添加到实体属性的验证器属性。标准属性有很多,或者,如果它们不能满足您的需要,您可以创建自定义属性。 检查此链接。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...