向实体类外部的属性添加数据批注

本文关键字:添加 数据 属性 实体 外部 | 更新日期: 2023-09-27 18:33:51

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

Dog.Name.AddDataannotation(new DisplayNameDataAnnotation("My dog"));

该类将类似于

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

它就像一个用于数据注释的流畅 API。通过这种方式,我将把我的数据注释与我的实体分开,我可以在不丢失它们的情况下重新生成它们。如果有人问我不能使用 DTO。另一件事,我有一个基于其数据注释验证实体的类,我希望它保持工作。

有可能做这样的事情吗?

谢谢,对不起我的英语!

向实体类外部的属性添加数据批注

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; }
}