如何使用代码优先实体框架将Ints数组存储在数据库中的单个字段中

本文关键字:数据库 存储 字段 单个 数组 Ints 代码 何使用 实体 框架 | 更新日期: 2023-09-27 18:24:25

我想做的是在数据库中存储一个Ints数组。我正在使用代码优先实体框架来创建我的数据库我似乎无法在数据库中创建List或Array元素。列表项不创建字段。我想这是因为它需要一张单独的桌子。

将数组存储在单个字段中的最佳方式是什么。我应该将数组转换为字符串吗?或者有更简单的方法吗?

我的模型包含:

public string Title { get; set; }
public List<int> IdArray { get; set; }

如何使用代码优先实体框架将Ints数组存储在数据库中的单个字段中

NHibernate支持这一点,但EF不支持。

如果您需要这样做,唯一的选择就是将其序列化存储。例如,你可以做:

  • XML列,并将其串行存储为XML
  • char列,并将其序列化为JSON存储

EF不会自动对其进行序列化/反序列化。您应该为添加一个进行序列化/反串行化的属性

public string IdsColumn { get; set; } // Mapped to DB
[NotMapped]
public List<int> Ids
{
    get { return Deserialize(IdsColumn); }
    set { IdsColumn = Serialize(value); }
}

当然,您必须提供序列化函数的实现,例如使用XMLSerializer或JSON.NET。

如果你想实现这个功能,请看这里:EF数据用户语音

例如,Richer集合支持,包括值类型的有序集合和字典

你可以投票支持它。

我不太确定你的情况,但大多数时候这从来都不是必要的。。。

基本上,如果你遇到这种情况,你应该考虑进一步规范你的表格。表中的数据需要是"原子的"。一旦作为对象检索,它就可以在列表中。