Asp.net mvc 使用DB生成的实体框架进行MVC3客户端验证

Asp.net mvc 使用DB生成的实体框架进行MVC3客户端验证,asp.net-mvc,asp.net-mvc-3,entity-framework,client-side,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,Client Side,在我的应用程序中,我使用了从数据库生成的实体框架以及ado.net dbcontext生成 当出现not null fk时,客户端工作正常,但是对于字段行avarchar/nvarchar not nullmvcvalidator似乎没有意识到字段应该是“必需的” 知道为什么会发生这种情况吗?不,Mvc验证器不会读取数据库元数据并执行客户端验证 通常,您会创建一个ViewModel/DTO并将验证放在那里。例如,与产品类似,请查看字段如何具有属性,这些属性来自名称空间,用于使用验证约束装饰模型

在我的应用程序中,我使用了从数据库生成的实体框架以及ado.net dbcontext生成

当出现
not null fk
时,客户端工作正常,但是对于字段行a
varchar/nvarchar not null
mvcvalidator似乎没有意识到字段应该是“必需的”


知道为什么会发生这种情况吗?

不,Mvc验证器不会读取数据库元数据并执行客户端验证

通常,您会创建一个ViewModel/DTO并将验证放在那里。例如,与产品类似,请查看字段如何具有属性,这些属性来自名称空间,用于使用验证约束装饰模型

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

        [Required]
        [StringLength(10)]
        public string Name { get; set; }

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

        [DisplayName("Price")]
        [Required]
        [RegularExpression(@"^\$?\d+(\.(\d{2}))?$")]
        public decimal UnitPrice { get; set; }
    }
请参见此处的完整示例:

在视图中使用模型(如上所述),mvc将执行验证,甚至客户端验证,然后使用返回的对象实例填充实体模型

如果您不想创建单独的类,并且坚持使用EntityFramework中的实体,那么可以创建一个buddy类

见本文:

向下滚动到=>但是如果我们使用图形工具进行ORM映射呢

有一个
Person
,它通过tge与Validator类链接

比如:

[MetadataType(typeof(PersonMetaData))]
public partial class Person
{
}
public class PersonMetaData
{
    [Required(ErrorMessage = "Name is required.")]
    public object Name;
}

不,Mvc验证器不会读取数据库元数据并执行客户端验证

通常,您会创建一个ViewModel/DTO并将验证放在那里。例如,与产品类似,请查看字段如何具有属性,这些属性来自名称空间,用于使用验证约束装饰模型

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

        [Required]
        [StringLength(10)]
        public string Name { get; set; }

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

        [DisplayName("Price")]
        [Required]
        [RegularExpression(@"^\$?\d+(\.(\d{2}))?$")]
        public decimal UnitPrice { get; set; }
    }
请参见此处的完整示例:

在视图中使用模型(如上所述),mvc将执行验证,甚至客户端验证,然后使用返回的对象实例填充实体模型

如果您不想创建单独的类,并且坚持使用EntityFramework中的实体,那么可以创建一个buddy类

见本文:

向下滚动到=>但是如果我们使用图形工具进行ORM映射呢

有一个
Person
,它通过tge与Validator类链接

比如:

[MetadataType(typeof(PersonMetaData))]
public partial class Person
{
}
public class PersonMetaData
{
    [Required(ErrorMessage = "Name is required.")]
    public object Name;
}

是的,我找到了同样的解决办法。我认为微软创造了一个“半好”的对象,缺乏一些功能;我不明白为什么实体框架不能像处理主键和外键那样完成所有工作。无论如何,谢谢:)视图模型方法非常好,并且有点将您与实体框架分离。如果你觉得有用的话,一定要考虑。是的,我找到了同样的解决办法。我认为微软创造了一个“半好”的对象,缺乏一些功能;我不明白为什么实体框架不能像处理主键和外键那样完成所有工作。无论如何,谢谢:)视图模型方法非常好,并且有点将您与实体框架分离。如果你觉得它有用的话,请考虑一下。