Rag*_*nar 1 c# enums entity-framework .net-core
我的 .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;
}
Run Code Online (Sandbox Code Playgroud)
FieldValidator 确实是一个枚举
EF 返回此错误:
无法映射属性“CartOptional.Validators”,因为它属于“List”类型,它不是受支持的原始类型或有效的实体类型。显式映射此属性,或使用 '[NotMapped]' 属性或使用 'OnModelCreating' 中的 'EntityTypeBuilder.Ignore' 忽略它。
我尝试了不同的解决方案,例如添加[Serializable]. 但似乎没有任何效果。我不明白为什么系统不能接受基础int
编辑:
我用这样的[Flags]注释尝试了解决方案
[Flags]
public enum FieldValidator
{
REQUIRED = 1,
ALPHABETIC = 2,
NUMERIC = 4,
EMAIL = 8,
PHONE = 16,
DATE = 32
}
Run Code Online (Sandbox Code Playgroud)
在父类中我有 public FieldValidator Validators { get; set; }
但是现在我尝试发布一个新元素,当我尝试验证以下内容时出现此错误ModelState:
"tierList[0].fieldList[0].validators": [ "解析枚举时出现意外标记 StartArray。路径 'tierList[0].fieldList[0].validators',第 24 行,位置 25。" ]
什么是token StartArray?
小智 5
问题根本不是枚举。它是列表。即使你尝试过,你也会得到同样的错误
public List<int> Validators { get; set; }
Run Code Online (Sandbox Code Playgroud)
或者
public List<string> Validators { get; set; }
Run Code Online (Sandbox Code Playgroud)
或任何其他类型。
这甚至不是 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
}
Run Code Online (Sandbox Code Playgroud)
并在您的CartOptional实体中使用此属性:
public List<FieldValidatorEntity> Validators { get; set; }
Run Code Online (Sandbox Code Playgroud)
一种解决方法是创建Validators一个字符串属性并保存诸如逗号分隔值之类的内容,或者甚至尝试使用适合您的字节数组。数据库可以将字节数组存储在列中。
希望我能帮上忙,编码快乐!
| 归档时间: |
|
| 查看次数: |
2943 次 |
| 最近记录: |