c# - Entity Framework +验证注解

标签 c# asp.net-mvc entity-framework validation

我想使用验证注解。 我已经有一个由 Entity Framework 实现的模型。 我需要数据验证,我知道有一个非常好的数据注释...... 但我真的不知道如何将它与正确的 Entity Framework 一起使用。

我应该编辑实体吗?还是我应该写分开的课?还是我应该编写继承自实体的类?

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

我想写尽可能少的代码。

最佳答案

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

Entity Framework 已经通过将所有类生成为部分类来帮助您解决这个问题。因此,如果您的模型中有一个名为 Settings 的实体,EF 将创建它:

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

这意味着您可以在其他文件中拥有任意数量的其他 partial class Setting 片段,如果/当您重新生成该代码时,EF 不会触及这些片段。如果要给这个添加数据校验属性,需要两步:

  1. 将元数据类型属性附加到设置类。此部分类片段的主体中不需要任何内容​​,它只是用来关联属性。

    [MetadataType(typeof(SettingMetadata))]   
    public partial class Setting
    {
    }
    
  2. 创建第二个类,它具有与 EF 类相同的公共(public)字段名称,并关联您想要的任何数据验证属性。编译器将按名称将元数据类字段与 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 抑制消息中所述,字段的名称和类型 必须在元数据类和关联类之间匹配才能起作用。

关于c# - Entity Framework +验证注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6125644/

相关文章:

c# - 什么是等效于 modelBuilder 的 HasDefaultValueSql 的 Entity Framework Core 属性?

c# - 数组中最接近的数字的索引,最接近 x,不能大于 x

c# - 如何修改 ASP.NET MVC 静态文件根目录

mysql - 带有 mysql 的 Entity Framework ,linux 和 windows 之间的表大写问题

entity-framework - EF Code First 中自引用外键的语法是什么?

c# - 将每个方法包装在 try-catch block 中会使程序变慢多少?

c# - 反射:从父类获取静态方法

c# - viewbag 没有将 `id` 保存到后期操作中

asp.net-mvc - MVC 区域 - 未找到 View

c# - 使用 MySql.Data.EntityFrameworkCore 包进行 TINYINT 或 BIT 类型映射时遇到问题