将DataAnnotations添加到实体类

时间:2016-02-09 04:11:40

标签: c# validation data-annotations

我需要将dataannotation属性添加到我的实体,但是我的实体之外。为什么?我的所有类都是由T4生成的,如果我向属性(DisplayName,Min,Max等)添加一些数据注释,当我重新运行T4来生成我的实体时,它们将会丢失。我希望实体由T4生成,然后在另一个类中执行以下操作:

Dog.Name.AddDataannotation(new DisplayNameDataAnnotation(“My dog”));

该课程类似于

public class Dog
{
    public int DogId { get; set; }
    public string Name { get; set; }
}

它就像数据注释的流畅api。通过这种方式,我可以将我的数据注释与我的实体分开,我可以重新生成它们而不会丢失它们。如果有人问我不能使用DTO。另一件事,我有一个基于其DataAnnotations验证实体的类,我想让它继续工作。

是否可以做这样的事情?

谢谢,对不起我的英文!

1 个答案:

答案 0 :(得分:1)

MetadataTypeAttribute旨在处理此方案。它不漂亮,但应该有用。

采取的步骤如下:

  • 确保您生成的类型为partial
  • 对于要添加元数据的每种类型,添加新的部分类定义,指定[MetadataType](例如[MetadataType(typeof(DogMetadata))]]
  • 重新定义DogMetadata中的属性,在那里添加属性

完整示例:

//dog.generated.cs
partial class Dog
{
    public int DogId { get; set; }
    public string Name { get; set; }
}

//dog.cs
[MetadataType(typeof(DogMetadata))]
partial class Dog {}

class DogMetadata
{
    [DisplayName("My dog")]
    public string Name { get; set; }
}