Экспорт / импорт подмножества данных с SQL-сервера - PullRequest
2 голосов
/ 30 июня 2011

В качестве функции для нашего приложения я ищу наилучший способ экспорта подмножества связанных данных из базы данных из базы данных SQL-Server 2008 Express на диск.Экспортируемый контент необходимо импортировать, сохраняя идентификационные данные в другой, такой как база данных и сервер.

У меня есть модель данных среднего размера из 143 таблиц, на которой я использую Entity Framework 3.5 для доступа к данным в наших приложениях.Из модели я хочу извлечь строки из почти всех таблиц на основе заданных критериев.

Новичок в C # и в сущности-структуре, но не в новинку для SQL-Server, я перенял этот проект у другого разработчика, который начал с написания методов ToXML () для каждой извлекаемой сущности (20%сделанный).Очевидно, кошмар обслуживания.Хуже будет FromXML () для сущностей, где есть сложности, связанные с уникальными ключами и т. Д. *

Я экспериментировал с SELECT ... FOR XML AUTO, XMLSCHEMA в сочетании с массовой загрузкой Microsoft SQLXML.Хотя сначала все шло хорошо с простыми ванильными таблицами, я вскоре зашел в тупик, потому что, похоже, он не поддерживает типы данных XML без схем или, по крайней мере, без значительного ручного вмешательства.У нас есть несколько таблиц со столбцами типа данных XML.Кроме того, есть еще неизвестные сложности с массовой загрузкой, связанные с триггерами, пустыми значениями, уникальными ключами и ограничениями, и многим другим, с чем я еще не сталкивался, я предполагаю.Напишите соответствующую схему XSD для нашей базы данных (или сгенерируйте ее) и используйте XSD.exe для генерации модели классов в виде коллекции DTO.Затем используйте библиотеку сопоставлений, такую ​​как AutoMapper, для заполнения DTO и сериализации их на диск.Затем сделайте обратное в отношении импорта.

Я знаю, что это большой и широкий вопрос, но может ли кто-нибудь дать некоторые рекомендации или идеи по этому поводу?Есть ли способы, которыми это можно сделать с помощью опций в структуре сущностей?Существуют ли библиотеки с открытым исходным кодом, которые могут это сделать?

Ответы [ 2 ]

0 голосов
/ 01 июля 2011

Как насчет использования SQL Server Compact для сохранения ваших экспортов.Затем вы можете использовать Microsoft Sync Framework для экспорта / импорта всех необходимых данных, включая идентификационные данные.

См. Microsoft Sync Framework и Синхронизация баз данных

0 голосов
/ 30 июня 2011

Я не знаю о вашей объектной модели, но не могли бы вы просто использовать сериализацию XML?

    public static string ObjectToXML(object Object)
    {
        if (Object == null)
            throw new ArgumentException("Object can not be null");
        using (MemoryStream Stream = new MemoryStream())
        {
            XmlSerializer Serializer = new XmlSerializer(Object.GetType());
            Serializer.Serialize(Stream, Object);
            Stream.Flush();
            return UTF8Encoding.UTF8.GetString(Stream.GetBuffer(), 0, (int)Stream.Position);
        }
    }

    public static T XMLToObject<T>(string XML)
    {
        if (string.IsNullOrEmpty(XML))
            throw new ArgumentException("XML can not be null/empty");
        using (MemoryStream Stream = new MemoryStream(UTF8Encoding.UTF8.GetBytes(XML)))
        {
            XmlSerializer Serializer = new XmlSerializer(typeof(T));
            return (T)Serializer.Deserialize(Stream);
        }
    }

Основная проблема, которую я вижу, - это данные XML (возможно, оберните их в CDATA док сериализации?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...