C # - Сериализация и десериализация таблиц Linq при сохранении отношений - PullRequest
1 голос
/ 28 июля 2010

Я хочу проверить свой код!Благородная цель, я уверен, что вы согласны.

Мне нужно смоделировать 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, поскольку таблицы «Клиенты» и «Покупки» - это просто списки, которые не связаны друг с другом.

Как я могу поддерживать отношения на протяжении всего процесса сериализации / десериализации?

Спасибо,

Гав

1 Ответ

0 голосов
/ 30 июля 2010

Задумывались ли вы о преобразовании таблиц Linq в набор данных, который можно сериализировать и поддерживать отношения?

...