c# - 列表无法映射
问题描述
我的 .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
?
解决方案
问题根本不是枚举。它是列表。即使你尝试过,你也会得到同样的错误
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
}
CartOptional
并在您的实体中使用此属性:
public List<FieldValidatorEntity> Validators { get; set; }
一种解决方法是创建Validators
一个字符串属性并保存类似逗号分隔的值,或者如果适合您,甚至可以尝试一个字节数组。数据库可以在一列中存储字节数组。
希望我能帮上忙,编码愉快!
推荐阅读
- mongodb - 有没有办法在 MongoDB 中存储 unicode 字符串?
- ruby-on-rails - 使用 AsyncStorage 在带有 Rails 后端的 React Native 中持久登录的问题
- mongodb - 如何在 MongoDB 上创建包含数组的数组
- tensorflow - 在 tf.case 上计算梯度时使用签名
- angular - 缺少角属性
- django - 为什么我提交表单后会出现 403 禁止错误?
- splunk - 在 docker 容器中运行的 Splunk 索引器在 docker 重新启动时覆盖 inputs.conf
- android - 如果互联网不可用,如何从 webview 隐藏链接?Kotlin,Android 工作室
- vba - Excel VBA Web Scraping 未引用创建的 Internet Explorer 对象
- r - 随机森林中的变量选择和预测精度