我使用生成的类作为模型,我希望将DataAnnotation属性添加到其某些属性中。由于它是生成的代码,我不想直接添加注释。还有另一种方法将它们附加到财产上吗?
我考虑过将模型作为一个接口,并使用一个部分类来获取生成的类来订阅它。是否有一个不太复杂的解决方案,假设它甚至可以工作?
答案 0 :(得分:6)
是的。您必须创建与原始模型具有相同属性的元数据类,并使用MetadataType属性将其连接到模型:
[MetadataType(typeof(MyModelMetadata))]
public partial class OriginalMyModel
{
}
public class MyModelMetadata
{
[Required]
public string MyProperty;
// ...
}
在示例ebove中,OriginalModel是您正确的模型类,而MyModelMetadata是仅用于注释属性的类。 MyModelMetadata应具有与模型相同的属性。
答案 1 :(得分:2)
您可以在班级上使用MetadataType属性:
实际上,我已经看到元数据经常与生成的模型不同步,这可能会导致一些令人头疼的问题。您可能希望查看备用验证机制而不是数据注释。
我一直在使用Fluent Validation,这很容易上手并开始使用。在Fluent Validation 2.0(仍在测试阶段)中,甚至可以对xVal集成部分进行Fluent验证,您可以将其引入项目进行客户端验证。
Fluent验证允许您在单独的类中定义验证。您需要做的就是为生成的类添加一个属性,告诉它使用哪个验证器,这可以通过部分类来完成。
或者,您可以创建从包含数据注释的域模型映射到的特定于视图的模型。在这种情况下,使用AutoMapper之类的东西简化来回映射。然后,如果您的域模型发生更改,则会出现编译时错误与元数据方法的对比。