Экспорт в XML из сайта динамических данных

Мне нужно обновить существующий сайт, основанный на DDS поверх Entity Framework, и он использует три разные модели баз данных из трех разных баз данных. И что ему нужно, так это простое дополнение к странице ListDetails: кнопка экспорта в XML...
Добавить кнопку очень просто. Создание XML также не сложно. Задача состоит в том, чтобы получить правильную таблицу для экспорта, пройтись по всем записям и полям и сгенерировать XML на основе любой из более чем 100 таблиц в системе!
Итак, моя кнопка вызывает обработчик экспорта (ashx), который генерирует XML. на основе таблицы, чье имя она получает через свои параметры. Код у меня примерно такой:

        Content_CobaEntities Coba = new Content_CobaEntities();
        MetadataWorkspace metadataWorkspace = Coba.MetadataWorkspace;
        EntityContainer container = metadataWorkspace.GetItems<EntityContainer>(DataSpace.CSpace).First();
        string namespaceName = metadataWorkspace.GetItems<EntityType>(DataSpace.CSpace).First().NamespaceName;
        EntitySetBase entitySetBase = container.BaseEntitySets.FirstOrDefault(set => set.ElementType.Name == Entity);

К сожалению, это работает только с одним контекстом, а у меня их три. (Но это основной контекст.) (Кроме того, второй параметр можно использовать для определения правильного контекста.) И хотя он позволяет мне определить необходимый тип сущности, он все равно не предоставит мне доступ к своим записям. и поля.

Итак, как мне получить данные для этого объекта? (Фильтры не важны, экспорт вернет все данные.)

И нет, не EF4. Нет .NET 4. Это старый проект VS2008, и его нельзя сильно изменить или обновить...


По сути, строка запроса содержит два параметра: ContextID и QueryID. ContextID сообщает мне, какой контекст использовать, и, поскольку у меня есть только три разных контекста, простая команда переключения решает эту проблему за меня. Но один из контекстов содержит более 60 запросов, каждый из которых относится к одной таблице базы данных. Сайт динамических данных предоставляет мне возможность добавлять, редактировать и удалять записи из этой таблицы, но ее необходимо экспортировать в формате, определяемом моим пользовательским кодом. Но с 60 таблицами слишком сложно писать оператор switch для каждого запроса, поэтому мне нужно что-то более общее.


person Wim ten Brink    schedule 27.06.2011    source источник
comment
Вы говорите, что не можете подключиться к другому контексту EF, отличному от основного контекста?   -  person WVDominick    schedule 29.06.2011
comment
На самом деле обработчик экспорта также должен быть доступен из других мест, и пользователи должны иметь возможность добавить его в закладки. Я могу получить правильный контекст, но теперь мне нужно выполнить правильный запрос со всеми полями и значениями для создания пользовательского XML.   -  person Wim ten Brink    schedule 30.06.2011


Ответы (1)


Как оказалось, я сделал вещи более сложными, чем нужно... Начну с параметров:

        string Entity = context.Request.QueryString.Get("Entity");
        string ContextID = context.Request.QueryString.Get("Context");

Затем мне нужно определить правильный контекст для использования, что легко:

        ObjectContext Context;
        if (ContextID.Contains("Content_LogEntities")) { Context = new Content_LogEntities(); }
        else if (ContextID.Contains("Content_CobusEntities")) { Context = new Content_CobusEntities(); }
        else { Context = new Content_CobaEntities(); };

Далее мне нужно получить правильные данные в запрошенной таблице. Также легко:

        ObjectQuery Tabel = Context.CreateQuery<EntityObject>(string.Format("[{0}]", Entity));

Не знаю, почему я пытался сделать эту часть более сложной, чем нужно.

Осталось пройтись по всем полям, но у меня есть обходной путь:

        foreach (var rec in Tabel)
        {
            foreach (PropertyInfo Prop in rec.GetType().GetProperties())
            {
                // Blah
            }
        }

Blah-часть проверяет Prop.Name, чтобы увидеть, является ли это ключом сущности, состоянием сущности, дочерней коллекцией или ссылкой или просто полем данных. Это позволяет мне генерировать практичный вывод XML.

person Wim ten Brink    schedule 30.06.2011