我们有一个使用LINQ to SQL的相当大的ASP.NET MVC项目,我们正在迁移到Windows Azure。
现在,我们需要序列化对象以存储在Azure分布式缓存中,并在.dbml文件中将“序列化模式”设置为“单向”,从而相应地使用DataContract
和DataMember
属性自动装饰生成的类和属性,似乎是推荐的方法。但是,当序列化并保存为null
时,这会使LINQ to SQL尚未加载的任何关系丢失。
考虑到以下几点,首选的处理方式是什么:
如果这归结为以某种方式手动指定要在整个项目中序列化的对象和关系;使用像 protobuf-net 之类的东西获得一些额外的性能提升可能不会是一个巨大的进步。
答案 0 :(得分:2)
但是,这会使LINQ to SQL尚未加载的任何关系在序列化时丢失并保存为null。
是的,这是正常的,并且在序列化时是预期的 - 您实际上是在拍摄当时可用内容的快照,因为延迟加载取决于它是通过数据上下文加载的。任何工具都无法抓取整个模型来寻找要加载的东西,因为这可能会无限期地继续下去,从根本上带来大量不需要的数据。
选项: