代码之家  ›  专栏  ›  技术社区  ›  Ragnar

无法映射列表<Enum>

  •  0
  • Ragnar  · 技术社区  · 7 年前

    public class CartOptional
        {
            [Required]
            public Guid Id { get; private set; }
            public int Price { get; set; }
            public string CartId { get; set; }
            public string Type { get; set; }
            public List<FieldValidator> Validators { get; set; }
            public string Label { get; set; }
            public string Value { get; set; }
            public DateTime CreatedAt { get; set; } = DateTime.Now;
            public DateTime UpdatedAt { get; set; } = DateTime.Now;
        }
    

    EF返回此错误:

    我尝试了不同的解决方案,比如 [Serializable] . 但似乎什么都不管用。我不明白为什么系统不能接受底层 int

    我试着用 [Flags]

    [Flags]
    public enum FieldValidator
    {
        REQUIRED = 1,
        ALPHABETIC = 2,
        NUMERIC = 4,
        EMAIL = 8,
        PHONE = 16,
        DATE = 32
    }
    

    在家长班上 public FieldValidator Validators { get; set; }

    ModelState :

    “tierList[0].fieldList[0].validators”:[ ]

    什么是 token StartArray ?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Kostas Dafnomilis    7 年前

    public List<int> Validators { get; set; }
    

    或

    public List<string> Validators { get; set; }
    

    或者其他类型的。

    这甚至不是EF的限制,而是数据库本身 . 您正试图在表列中添加值列表。我知道的数据库没有这样的配置。

    如果要在数据库表中附加一个值列表,方法是创建一个新表(可能是新的查找表),该表包含 CartOptional

    public class FieldValidatorEntity
    {
        public int Id { get; set; }
    
        public int CartOptionalId { get; set; }
        public CartOptional CartOptional { get; set; }
    
        public FieldValidator Value { get; set; }
        // other columns
    }
    

    在你的 实体:

    public List<FieldValidatorEntity> Validators { get; set; }
    

    解决方法是 Validators 一个字符串属性,并保存逗号分隔值之类的值,如果适合,甚至可以尝试使用字节数组。数据库可以在列中存储字节数组。

    快乐的编码!

        2
  •  1
  •   rickvdbosch    7 年前

    Enum 值不应该是一个问题,但是由于枚举只是一个整数值,所以不能将它用作(一系列)实体。您应该显式地使枚举成为一个实体,或者改用标志Enum(我建议这样做)。

    看看 Working with Enumerated Values in Entity Framework 例如。