【发布时间】:2018-10-31 10:19:16
【问题描述】:
我的 .Net Core 项目中有模型,我想要一个枚举列表。
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;
}
FieldValidator 确实是一个枚举
EF 向我返回此错误:
无法映射属性“CartOptional.Validators”,因为它属于“列表”类型,不是受支持的原始类型或有效的实体类型。显式映射此属性,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略它。
我尝试了不同的解决方案,例如添加[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": [ “解析枚举时出现意外的令牌 StartArray。路径 'tierList[0].fieldList[0].validators',第 24 行,第 25 位。” ]
什么是token StartArray?
【问题讨论】:
-
为什么要尝试列出
?解释一下? -
为什么使用
Serializable属性?该错误表示问题出在类型本身。FieldValidator是什么?除非它是一个映射到另一个表的 entity,否则 EF 将不知道如何处理它。它是否代表表中的 5 列?用作位域的单个int?还有什么? -
@Ragnar 如果枚举是 Flag,则属性不应该是
List<FiledValidator>,而应该是public FieldValidator Validators { get; set; }。
标签: c# entity-framework enums .net-core