MVC4避免在viewmodel中重复模型字段长度验证

时间:2013-12-03 11:56:40

标签: entity-framework asp.net-mvc-4

我的应用程序中有以下实体(使用EF6 codefirst)。

public partial class Staff
{
   public int Id { get; set; }
   public string Username { get; set; }
   public string Password { get; set; }
   public bool IsAdmin { get; set; }
   public bool IsActive { get; set; }
}

public class StaffMap : EntityTypeConfiguration<Staff>
{
    public StaffMap()
    {
        // Primary Key
        this.HasKey(t => t.Id);

        // Properties
        this.Property(t => t.Username)
            .IsRequired()
            .HasMaxLength(60);

        this.Property(t => t.Password)
            .IsRequired()
            .HasMaxLength(60);

        // Table & Column Mappings
        this.ToTable("Staff");
        this.Property(t => t.Id).HasColumnName("Id");
        this.Property(t => t.Username).HasColumnName("Username");
        this.Property(t => t.Password).HasColumnName("Password");
        this.Property(t => t.IsAdmin).HasColumnName("IsAdmin");
        this.Property(t => t.IsActive).HasColumnName("IsActive");
    }
}

我创建了以下用于添加和编辑工作人员的viewmodel:

public class StaffViewModel
{
    public int Id { get; set; }

    [Required]
    public string Username { get; set; }

    [Description("Is Admin")]
    public bool IsAdmin { get; set; }

    [Description("Is Active")]
    public bool IsActive { get; set; }
}

您将看到EF生成的StaffMap类中的用户名字段限制为60个字符。如果用户输入的字符串超过60个字符,则数据验证通过正常,但在尝试保存时会在链中进一步抛出数据异常。

我希望viewmodel提醒用户该字段的最大长度为60个字符,但我想避免在viewmodel中添加额外的字段长度验证。

我看到它的方式,字段长度已经在域中指定了一次,所以让viewmodel使用域字段长度会很好。

有谁知道如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

如果你需要在模型和视图模型中加上长度和“必要性”,我同意它违反了DRY。如果可以避免这样做会更好。我也在寻找解决方案。你放弃了吗?