我有一个采用 3 层方法的 MVC 3 应用程序。我的数据层包含 edmx 文件和 t4 模板,每次我的 edmx 文件更改时,它都会使用基本的 DataAnnotations 生成我的实体。
此外,我正在利用以下内容来允许对现有实体和属性进行额外验证。这个允许我将自动生成的 DataAnnotations 与自己的书面注释结合起来。
[MetadataType(typeof (PersonMetaData))]
public partial class Person
{
}
public class PersonMetaData
{
[RegularExpression(@"(\w|\.)+@(\w|\.)+", ErrorMessage = "Email is invalid")] public string Name;
}
更进一步,我发现以下文章http://www.howmvcworks.net/OnModelsAndViewModels/ExtendingTheModelBinderForEnhancedValidation
这允许我使用现有的 ASP.NET MVC 逻辑并在需要时实现自己的验证方法。这个例子对我有用。
不幸的是,因为我有一个 3 层应用程序并且想要在业务逻辑(而不是在数据层)中验证我的实体,所以如果不创建循环依赖项,我就无法将对业务逻辑的任何调用放入 Validate 方法中。
有没有更好的方法来组合自动生成的 DataAnnotations、自己的验证扩展、业务逻辑中的验证和 IBindingValidatable 方法?
谢谢