3

我正在使用生成的类作为模型,并且希望将 DataAnnotation 属性添加到它的某些属性中。由于它是生成的代码,我不想直接添加注释。还有其他方法可以将它们附加到属性上吗?

我考虑过让模型成为一个接口,并使用一个部分类来让生成的类订阅它。假设它甚至可以工作,是否有一个不太复杂的解决方案?

4

2 回答 2

6

就在这里。您必须创建与原始模型具有相同属性的元数据类,并使用 MetadataType 属性将其连接到您的模型:

[MetadataType(typeof(MyModelMetadata))]
public partial class OriginalMyModel
{
}

public class MyModelMetadata
{
    [Required]
    public string MyProperty;  

    // ...
}

在上面的示例中,OriginalModel 是您正确的模型类,而 MyModelMetadata 是仅用于注释属性的类。MyModelMetadata 应该具有与您的模型相同的属性。

于 2009-12-10T17:03:36.937 回答
2

您可以在您的类上使用 MetadataType 属性:

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute.aspx

但在实践中,我经常看到元数据与生成的模型不同步,这可能会导致一些令人头疼的问题。您可能想要研究替代验证机制而不是数据注释。

我一直在使用Fluent Validation,它很容易上手并开始使用。Fluent Validation 2.0(仍处于测试阶段)中甚至还有一个 Fluent Validation to xVal 集成块,您可以将其引入您的项目以进行客户端验证。

Fluent Validation 允许您在单独的类中定义您的验证。您需要做的就是向生成的类添加一个属性,告诉它使用什么验证器,这可以通过部分类来完成。

或者,您可以创建从包含数据注释的域模型映射到的特定于视图的模型。在这种情况下,使用类似AutoMapper的东西来简化来回映射。然后,如果您的域模型发生更改,您会得到编译时错误,而不是元数据方法。

于 2009-12-10T17:08:23.810 回答