我想測試我的代碼!我相信你同意一個崇高的目標。C# - 序列化和反序列化Linq表,同時保持關係
我需要模擬DataContexts爲我的迴歸測試,運行測試將驗證任何代碼更改,給定相同的輸入我們產生相同的輸出。
我使用Moles來嘲笑我的數據上下文。這很棒,很簡單,我推薦它,如果它更輕便,我可能會移動到Moq,但這是另一回事。
要獲取我的Mocked Data Contexts的數據,我想序列化存儲在MSSQL DB中的少量實時數據。爲了允許Linq-To-SQL類被序列化,我使用DataContractSerializer,其設置序列化模式屬性爲單向,如MSFT所示。這使我可以將行序列化爲XML。
當我想序列化一個表時,我必須首先通過調用ToList()將它拉進內存。這是因爲Linq.Data.Table本身不是可序列化的。
因此,現在我爲每個表都有一個文件,然後我可以反序列化XML文件並從列表中創建Linq表。然後我們創建一個委託並將其用作模擬數據上下文的實現。所有這些在this screencast中都有清楚的解釋。
我遇到的問題是維護表之間的關係,我如何序列化所有依賴關係的行,然後反序列化它們,使它們仍然可以訪問。
例
- 在我的生活DB我有表客戶和購買
- 存在從客戶來購買
在應用程序代碼中一個一對多的關係我想測試我使用類似的語法;
VAR firstCustomerPurchases = Customers.First()。購買
這將在我的測試情況下,我MockDataContext爲客戶和採購表不起作用只是列出了不相互結合。
如何在整個序列化/反序列化過程中保持關係?
感謝,
GAV株系