C# - 在保持关系的同时序列化和反序列化Linq表

时间:2010-07-28 08:25:08

标签: c# linq-to-sql serialization entity-relationship datacontractserializer

我想测试我的代码!一个崇高的目标,我相信你同意。

我需要为我的回归测试模拟DataContexts,运行测试将验证对于任何代码更改,给定相同的输入我们产生相同的输出。

我正在使用Moles来模拟我的数据上下文。这很棒很简单,我推荐它,如果它更轻巧,我可能会转移到Moq,但这是另一个故事。

要获取Mocked Data Contexts的数据,我想序列化存储在MSSQL DB中的少量实时数据。为了允许Linq-To-SQL类被序列化,我使用DataContractSerializer按照MSFT的指示将序列化模式属性设置为单向。这允许我将行序列化为XML。

当我想序列化表时,我必须首先通过调用 ToList()将其拉入内存。这是因为 Linq.Data.Table 本身不可序列化

所以现在我有一个每个表的文件,然后我可以反序列化XML文件并从列表中创建Linq表。然后我们创建一个委托并将其用作模拟数据上下文的实现。 this screencast中明确解释了所有这些。

我遇到的问题是维护表之间的关系,如何序列化具有所有依赖关系的行,然后以可以访问它们的方式对其进行反序列化。

示例

  • 在我的Live DB中,我有表客户和购买
  • 从客户到购买之间存在一对多的关系
  • 在我希望测试的应用程序代码中,我使用的语法如;

    var firstCustomerPurchases = Customers.First()。Purchases

  • 这在我的MockDataContext测试用例中不起作用,因为Customers和Purchases表只是彼此没有绑定的列表。

如何在整个序列化/反序列化过程中保持关系?

谢谢,

GAV株系

1 个答案:

答案 0 :(得分:0)

您是否考虑过将Linq表转换为可序列化并保持关系的DataSet?