【问题标题】:Entity framework + validation annotation实体框架+验证注解
【发布时间】:2011-05-25 13:59:14
【问题描述】:

我想使用验证注释。 我已经有一个由实体框架实现的模型。 我需要数据验证,我知道有一个非常好的数据注释...... 但我真的不知道如何正确使用实体框架。

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

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

我想写尽可能少的代码。

【问题讨论】:

  • 您要添加什么样的验证?你能给我们看一些课程代码吗?

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


【解决方案1】:

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

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

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

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

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

    [MetadataType(typeof(SettingMetadata))]   
    public partial class Setting
    {
    }
    
  2. 创建与 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 禁止消息中所述,字段的名称和类型必须在元数据类和关联类之间匹配才能正常工作。

【讨论】:

    【解决方案2】:

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

    Check this link.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 2011-04-14
      • 1970-01-01
      相关资源
      最近更新 更多