C# - 序列化和反序列化 Linq 表,同时维护关系

发布于 2024-09-11 22:22:17 字数 1516 浏览 10 评论 0 原文

我想测试我的代码!这是一个崇高的目标,我相信您也会同意。

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

我正在使用 Moles 来模拟我的数据上下文。它很棒而且简单,我推荐它,如果它更轻量级,我可能会转向 Moq 但那是另一个故事了。

要获取我的模拟数据上下文的数据,我想序列化少量实时数据存储在 MSSQL 数据库中。为了允许序列化 Linq-To-SQL 类,我使用 DataContractSerializer 已按照 MSFT。这允许我将一行序列化为 XML。

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

现在我为每个表都有一个文件,然后我可以反序列化 XML 文件并从列表创建 Linq 表。然后我们创建一个委托并将其用作模拟数据上下文的实现。所有这些都在此截屏视频中进行了清楚的解释。

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

示例

  • 在我的实时数据库中,我有表“客户”和“购买”,
  • 从“客户”到“购买”存在一对多关系
  • 在我希望测试的应用程序代码中,我使用以下语法:

    var firstCustomerPurchases = Customers.First().Purchases

  • 这在我的 MockDataContext 测试用例中不起作用,因为“客户”和“购买”表只是彼此不绑定的列表。

如何在整个序列化/反序列化过程中维护这种关系?

谢谢,

加夫

I want to Test my code! A noble goal I'm sure you agree.

I need to mock out DataContexts for my Regression tests, running the test will verify that for any code change, given the same input we produce the same output.

I'm using Moles to mock out my data contexts. It's awesome and simple, I recommend it, I might move to Moq if it's more lightweight but that's another story.

To get data for my Mocked Data Contexts I want to serialize a small amount of live data stored in an MSSQL DB. To allow the Linq-To-SQL classes to be serialized I use a DataContractSerializer having set the Serialization Mode property to Unidirectional as instructed by MSFT. This allows me to serialize a row to XML.

When I want to serialize a table I must first pull it into memory by calling ToList(). This is because Linq.Data.Table is not itself serializable.

So now I have a file for each table, I can then Deserialize the XML files and create Linq Tables from the Lists. Then we create a delegate and use that as the implementation for the Mock Data Context. All of this is clearly explained in this screencast.

The problem I have is with maintaining relationships between tables, how can I serialize a row with all of its dependencies and then deserialize it in such a way that they're still accessible.

EXAMPLE

  • In my Live DB I have Tables Customers and Purchases
  • There exists a one to many relationship from Customers to Purchases
  • In the application code I wish to test I use syntax like;

    var firstCustomerPurchases = Customers.First().Purchases

  • This won't work in my test cases with my MockDataContext as the Customers and Purchases tables are just lists which aren't bound to each other.

How can I maintain the relationship throughout the serialization/deserialization process?

Thanks,

Gav

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓬勃野心 2024-09-18 22:22:17

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

Have you tought about converting your Linq tables into a DataSet, which is serializable and maintains the relationships?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文