2012-02-08 33 views
0

在我的应用程序中,我使用的是使用ado.net dbcontext生成的数据库生成的实体框架。MVC3客户端使用数据库生成的实体框架进行验证

客户端效果很好,当有一个not null fk但对于场A线varchar/nvarchar not null只是似乎该mvcvalidator不承认该字段是应该“必需的”

任何想法为什么发生这种情况?

+1

**和代码是... ** – gdoron 2012-02-08 10:00:27

回答

4

否Mvc验证器不会读取您的数据库元数据并执行客户端验证。

通常你会创建一个ViewModel/DTO并在那里放置验证。就像产品一样,看看这些字段是如何具有属性的,这些属性来自System.ComponentModel.DataAnnotations命名空间,并用于用验证约束来修饰模型。

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; } 
    } 

查看完整的例子在这里:在你看来 http://www.asp.net/mvc/tutorials/older-versions/models-(data)/validation-with-the-data-annotation-validators-cs

使用的型号(如上面),MVC将执行验证,即使客户端,然后使用返回的对象实例,以填补你的实体模型。

如果您不想创建单独的类并坚持使用EntityFramework中的实体,则可以创建好友类。

看到这篇文章: http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

向下滚动到=>但是,如果我们使用我们的ORM映射的图形工具?

有一个Person,它是由猪传染性胃肠炎MetadataTypeAttribute

喜欢的东西连起来Validator类:

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

是,我找到了相同的解决方案。 我认为微软创建了一个缺乏某些功能的“半佳”对象;我不明白为什么实体框架不能像为主键和外键一样完成所有的工作。 无论如何谢谢 – antogg2004 2012-02-08 14:00:30

+0

:)视图模型的方法是相当不错的,有点你从实体框架中分离出来。如果您发现它有帮助,请考虑[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – gideon 2012-02-08 14:06:53