我想为我的某个应用程序实体添加历史记录功能。我的应用程序使用linq to sql作为O / RM。 我选择用于保存以前版本的实体的解决方案是序列化旧版本并在某处保存序列化版本。
无论如何,我一直在寻找将linq序列化为sql实体的最佳方法。我发现的最好的解决方案之一就是在DataContext对象中将序列化模式设置为Unidirectional,然后使用.net serializer。看来该方法效果很好。
但是,我的问题是,这种方法对数据上下文或任何性能影响都有任何副作用吗?例如,在打开单向序列化模式后,延迟加载对象是否完好无损?
我经常搜索但却一无所获。
并且,你认为我应该采用另一种方式来序列化对象吗?任何更便宜的方法?
PS 1:我不喜欢使用DTO,因为我应该保持DataContext对象和DTO之间的兼容性。
PS 2:请注意,我正在处理的应用程序相对较大,目前负载很重。所以我应该注意O / RM行为或性能问题的变化,因为我无法查看整个应用程序+在线版本。
非常感谢:)
答案 0 :(得分:1)
Re“然后使用.net serializer”,单向模式的目的是支持DataContractSerializer
(具体而言)。效果基本上只是[DataContract]
/ [DataMember]
标志的添加,但是:根据经验,尽管您有所保留,但我会强烈建议您去DTO路线:
IList.Add
和IList<T>.Add
的实现方式不同,意思是一个触发数据更改标志,一个不触发;讨厌)我强烈主张咬紧牙关并创建一个与您要序列化的DTO模型相匹配的模型; DTO模型非常简单,只需要几分钟就能完成,包括映射到数据模型/从数据模型映射的代码。这将使您可以完全控制序列化的内容,同时还可以自由地进行迭代,并且可以使用不同的序列化程序