.Net 使用 Enum 作为数据注释、DTO 和 DB 列

问题描述 投票:0回答:1

我是 .NET 的新手,我一直在努力使用 Enum 作为数据注释来验证我的请求。我花了一整天的时间来解决大部分问题,但我不相信我的解决方案是好的做法。

我的目标是对 FormBody 属性实现验证,其中该属性的类型是 Enum。

这是枚举的示例:

public enum Color
{
    Red,
    Green,
    Blue
}

现在,为了简化问题,我有两个使用这种颜色的模型。我们称它们为 Car 和 CarDtoRequest。

在CarDtoRequest中,用作FromBody的类型,它看起来像这样:

public class CarDtoRequest
{
    [Required]
    [EnumDataType(typeof(Color), ErrorMessage = "Color must be either 'Red', 'Green', or 'Blue'")]
    public string Color { get; set; }
}

另外,实际的 Car 类型类如下所示:

public class Car
{
    [Column(TypeName = "nvarchar(50)")]
    public Color Color { get; set; }
}

我的第一个问题是,我花了 3-4 个小时,但我仍然无法将动态字符串分配到连接 Color 中所有值的 ErrorMessage 中(任何非静态字符串都会显示错误:CS0182:属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式)。

另外,我迁移到DbContext类中的数据库如下:

public DbSet<Car> Cars { get; set; }

验证有效,并且仅当 FromBody 颜色是枚举值之一时才有效。此外,它将它作为字符串保存在数据库中,但在我的代码中,它仍然保存为数字。

我正在使用 AutoMapper 从域模型转换为 DTO 模型,反之亦然。

然而,所有这一切似乎都不是好的做法和专业的。任何改进建议将不胜感激。

c# asp.net enums
1个回答
0
投票

尝试自定义获取/设置

    public class Car
    {
        private Color c { get; set; }
        public string Color {
            get { return c.ToString(); } 
            set { c = (Color)Enum.Parse(typeof(Color), value); 
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.