1

我们有一个相当大的使用 LINQ to SQL 的 ASP.NET MVC 项目,我们正在迁移到 Windows Azure。

现在,我们需要序列化对象以存储在 Azure 分布式缓存中,并在 .dbml 文件中将“序列化模式”设置为“单向”,从而自动使用和属性来装饰生成的类和DataContract属性DataMember,似乎是推荐的方法。但是,这会使 LINQ to SQL 尚未加载的任何关系在序列化并保存为null.

考虑到以下几点,首选的处理方式是什么:

  • 如前所述,这是一个相当大的项目,生成的 *.designer.cs 文件接近 1.5MB
  • 由于许多深层的类关系,完全禁用延迟加载很可能会对 性能造成很大影响。
  • 更改 ORM 工具是我们正在考虑的事情,但在切换平台的同时这样做可能是一件坏事。

如果这归结为以某种方式手动指定要在整个项目中序列化的对象和关系;使用protobuf-net 之类的东西来获得一些额外的性能提升可能不是一个巨大的进步。

4

1 回答 1

2

但是,这使得任何尚未由 LINQ to SQL 加载的关系在序列化并保存为 null 时都会丢失。

是的,这是正常的,并且在序列化时是预期的 - 您实际上是在拍摄当时可用的内容的快照因为延迟加载取决于它是通过数据上下文加载的。任何工具都不建议爬取整个模型以寻找要加载的内容,因为这可能会无限期地继续下去,本质上会导致大量不需要的数据发挥作用。

选项:

  • 在序列化之前显式获取(通过“loadwith”或通过点击适当的属性先发制人)您感兴趣的数据
  • 或者,将数据加载到一个完全独立的DTO 模型中以进行序列化 - 在许多方面,这是对第一个模型的重新陈述,因为它必然涉及迭代(投影)您想要的数据,但这意味着您正在创建DTO 以适合您实际要发送的确切形状
于 2013-10-08T11:32:48.917 回答