2012-04-18 57 views
1

我有一个3层方法的MVC 3应用程序。我的数据层包含edmx文件和一个t4模板,每当我的edmx文件发生变化时,它都会生成带有基本DataAnnotations的实体。业务验证和数据注记在层

此外,我正在使用以下来允许对现有实体和属性进行额外验证。这一个允许我将自动生成的DataAnnotations与自己的书面注释结合起来。

[MetadataType(typeof (PersonMetaData))] 
public partial class Person 
{ 
} 

public class PersonMetaData 
{ 
    [RegularExpression(@"(\w|\.)[email protected](\w|\.)+", ErrorMessage = "Email is invalid")] public string Name; 
} 

的进一步深入,我发现下面的文章http://www.howmvcworks.net/OnModelsAndViewModels/ExtendingTheModelBinderForEnhancedValidation

这样我就可以使用现有的ASP.NET MVC的逻辑和实现,如果需要的话,一个自己的验证方法。这个例子适用于我。不幸的是,因为我有一个3层应用程序,并且想要在业务逻辑(而不是数据层)中验证我的实体,所以我无法将任何对业务逻辑的调用放入Validate方法中,而不会创建循环依赖项。

是否有更好的方法来结合自动生成的DataAnnotations,自己的validationextensions,业务逻辑验证和IBindingValidatable方法?

谢谢

回答

0

你应该保持验证从业务层业务逻辑的规则,结果,只有包括在UI层的数据输入验证。

因此,例如验证电子邮件地址条目,根据一些正则表达式属于UI层,但确保电子邮件地址是唯一的您的系统应该在业务逻辑中完成。

我希望这会有所帮助。