【问题标题】:Entity Framework Store Object in Column实体框架在列中存储对象
【发布时间】:2019-03-22 09:58:40
【问题描述】:

我目前遵循一种模式,将对象序列化和反序列化到特定列。

这种模式以前很好,但是现在由于事务的频率,将对象序列化为 JSON 字符串,然后检索字符串并反序列化回对象的成本太高了。

是否可以将对象直接存储到列中以避免这种成本?我正在使用实体框架,我想将存储在此列中的数据作为对象类型处理。

请指教。

【问题讨论】:

  • SQL Server 没有数据类型对象,那么您想为数据库类型使用什么?可能是一个字节[]。那么你打算如何获取你的对象并转换为 byte[] 呢?也许使用元帅方法?那么如果一个属性不是内联的会发生什么你如何转换为一个字节[]?

标签: c# .net sql-server entity-framework


【解决方案1】:

JSON 序列化并不快。它比 XML 更快、更简洁,但比二进制序列化慢得多。我会查看第三方二进制序列化程序,即 ZeroFormatter 或 Wire/Hyperion。对于我自己的东西,我使用 Wire 作为“足够快”且易于实现的选项。

就表结构而言,我建议将序列化数据存储在单独的 1..0-1 关联表中。因此,如果我有一个 Order 表,我想序列化一些额外的订单相关结构(例如来自 3rd 方交付系统),我将创建另一个名为 OrderDeliveryInfo 的表,其 PK 为 OrderID 以加入 Order 表以容纳序列化数据的 Binary[] 列。这样做的原因是为了避免每次查询订单记录时检索和传输二进制 blob 的成本,除非我明确请求交付信息。

【讨论】:

  • 我从 JSON 迁移到 MessagePack。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多