2

林发展与实体框架和Im特林用脚手架的MVC 3应用程序。MVC 3 - 实体框架 - 脚手架 - 验证问题

为了解决“类型不mappedd发出”我已经做了程序中发现here。现在一切正常。

默认验证无法正常工作,需要场均触发一个例外,而不是对的ValidationSummary写东西,所以我想用属性添加我的自定义验证。 问题是关于“类型没有映射问题”的解决方案增加了2个.TT文件和我的每一个实体的cs文件,这些文件我的每个模型(的.edmx)发生变化时重新创建并保存,所以我不能把我的数据注解验证器属性放在这些类中,要么我不能创建一个新的部分类与一些属性,因为它们已经定义。

我该怎么办?我可以使用jQuery来移动验证客户端吗?或者,也许有一种解决方法可以将Data Annotation Validator Attributes添加到我的实体中,我更喜欢这种方式来更好地了解我的验证。

在此先感谢

回答

3

我已经不使用的DbContext发电机,但曾与POCO发生器类似的问题。假设该解决方案是类似的:

修改创建的实体类的附加属性添加到类的T4模板:

[MetadataType(typeof(CustomerMetaData))] 

其中“客户”是实体的名称。

然后,手动创建元数据类为每个实体。如果你愿意的话,你实际上也可以使用T4模板,但不能一直运行。

元数据类看起来像这样...

public class CustomerMetaData 
{ 

    [StringLength(150, ErrorMessage="Maximum length is 150 characters.")] 
    [Required(ErrorMessage="CustomerName is required.")] 
    public virtual string CustomerName 
    { 
     get; 
     set; 
    } 
    public virtual Nullable<int> Type 
    { 
     get; 
     set; 

    } 

    // ... etc ... 
} 

正如你所看到的,你重视规则的元数据类,因而从生成的实体类的抽象它。

+0

你可以给一些关于修改t4模板的链接吗?这个解决方案听起来我好了...... – JasonMenny

+0

这是困难的,因为我使用的是不同的T4模板给你的具体细节,但会在生成的源代码的类模板的一行或多行(搜索类或(MetadataType(typeof(<#= code.Escape(entity)#> MetaData))]。我假设(实体)将与您的模板相同,但它可能不会。您应该从类声明中看到使用了哪个变量名称。 T4模板在构造上非常像ASP。 –

+0

谢谢,我在.tt文件里面,我差不多完成了!现在,我将创建元数据类,以查看是否一切正常 – JasonMenny