【问题标题】:razor class validations on entity framework实体框架上的剃刀类验证
【发布时间】:2012-08-29 13:21:50
【问题描述】:

关于最佳实践的快速问题。

我有一个项目 MVC3 + razor,在我的课堂上,在我的每个属性上,我都有一些类似的验证:

    [StringLength(20)]
    [RegularExpression(@"^[1-9][0-9]*$",ErrorMessage="Only Numbers Allowed") ]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Please Inform The Code")]
    [Display(Name = "Code")]
    public string gCode { get; set; }

这是在我的模型上的 Customer 类。验证在 UI 上完美运行。

在第二个项目中,当首先使用 Entity Framework - 数据库时,我有我的 edmx 文件和我的实体,我使用 ObjectContext 查询数据库,这意味着 Customer 类是由 EF 构建的。

我现在应该在哪里添加这些验证?

【问题讨论】:

  • 我是......但我没有在我的 viewModel 上重新声明我的所有属性。也许我没有使用正确的方法。可以举个例子吗?

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


【解决方案1】:

模型首先有这个问题 - 但它可以使用元数据来解决。假设您有一个名为 Field 的生成实体和您想用 [Required] 属性装饰的 Value 字段,只需执行以下操作:

namespace Model.Entities {

    [MetadataType(typeof(FieldMetadata))]
    public partial class Field : EntityBase {

    }

    class FieldMetadata {
        [Required]
        public object Value;
    }
}

在这里,您将元数据添加到您无法修改的现有类成员的 Value 成员中。

编辑:如果它不起作用,请同时调用 TypeDescriptor。

TypeDescriptor.AddProvider(new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Field), typeof(FieldMetadata)), typeof(Field));

【讨论】:

  • 感谢昆顿!不确定我是否得到你。 Fields 类已经在我的 Model.Designer.cs 上声明了,我应该如何重新处理它?
  • 这是一个部分类,所以你可以重新声明它。
  • chan 我在不同的cs文件上做吗?因为我认为我不应该更改生成的一个 EF
  • 您必须创建一个单独的类文件。这是唯一的方法。
  • 我做到了。它可以工作,但是这种方法需要编辑 EF 生成的类,这不好,因为如果重新生成类,更改将被覆盖..
猜你喜欢
  • 2010-09-16
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多