【发布时间】:2016-12-09 02:08:01
【问题描述】:
我有一个旧数据库,将用户 cmets(以及许多其他文本字段)存储为 blob 数据类型,我无法更改。
我正在编写一个数据访问层,它需要在从数据库中检索数据时始终将数据转换为string,并在保存时将其转换回blob。
EF 脚手架工具为这些实体生成了byte[] 数据类型的属性。
public byte[] Comment { get; set; }
我注意到,如果我只是将实体属性类型更改为string,它实际上确实可以正确保存数据,但加载数据会导致转换错误:
无法将“System.Byte[]”类型的对象转换为“System.String”类型。
(有趣的是,版本 1.0.0 没有抛出这个错误,加载和保存工作正常。)
我的问题是...... 有没有办法配置 EF 核心,以便在我从数据库中检索这些数据时自动将其转换为字符串,并在保存回来时自动将其转换回 blob?还是我需要编写一大堆私有的 getter 和 setter 来进行这种操作?
【问题讨论】:
-
byte[]是与string完全不同的数据类型。将byte[]转换为string取决于编码,... EF 无法为您完成。最佳做法是将其保留为byte[]并编写一个 getter 来返回字符串表示形式,例如public string MyString { get { return Encoding.UTF8.GetString(MyBytes); } } -
我认为在github.com/aspnet/EntityFramework/issues/242 实现之前,最好的选择是伙伴属性。