Я хочу проверить свой код!Благородная цель, я уверен, что вы согласны.
Мне нужно смоделировать DataContexts для моих регрессионных тестов, запуск теста проверит, что при любом изменении кода при одинаковом входном сигнале мы производим одинаковый вывод.
Я использую Родинок , чтобы смоделировать мои контексты данных.Это удивительно и просто, я рекомендую это, я мог бы перейти на Moq , если он более легкий, но это другая история.
Чтобы получить данные для моих Контекстов Mocked Data Iхотите сериализовать небольшое количество живых данных, хранящихся в БД MSSQL.Чтобы разрешить сериализацию классов Linq-SQL, я использую DataContractSerializer , установив для свойства Serialization Mode значение Unidirectional в соответствии с инструкциями MSFT .Это позволяет мне сериализовать строку в XML.
Когда я хочу сериализовать таблицу, я должен сначала вытащить ее в память, вызвав ToList () .Это потому, что Linq.Data.Table сама по себе не сериализуема .
Так что теперь у меня есть файл для каждой таблицы, я могу затем десериализовать файлы XML и создатьLinq Таблицы из списков.Затем мы создаем делегат и используем его в качестве реализации для контекста фиктивных данных.Все это ясно объяснено в этой экранной передаче .
Проблема, с которой я столкнулся, заключается в поддержании связей между таблицами, как я могу сериализовать строку со всеми ее зависимостями, а затем десериализовать ее таким образомспособ, которым они все еще доступны.
ПРИМЕР
- В моей Live DB у меня есть таблицы Клиенты и покупки
- Существуетотношение один ко многим от Клиентов к Покупкам
В коде приложения, которое я хочу протестировать, я использую синтаксис вроде:
var firstCustomerPurchases = Customers.First (). Покупки
Это не будет работать в моих тестовых примерах с моим MockDataContext, поскольку таблицы «Клиенты» и «Покупки» - это просто списки, которые не связаны друг с другом.
Как я могу поддерживать отношения на протяжении всего процесса сериализации / десериализации?
Спасибо,
Гав