EF4 QueryView или DefiningQuery? - PullRequest
       2

EF4 QueryView или DefiningQuery?

1 голос
/ 01 апреля 2011

Я сейчас пытаюсь завершить разработку проекта и, в основном, пришел к развилке.Я решил, что хочу использовать EF4 в качестве слоя хранения данных, но моя существующая база данных доставляет мне некоторые проблемы.Изменение или расширение базы данных не вариант.У меня есть одна таблица, которая действительно служит нескольким целям и содержит 120 столбцов (я не создавал эту таблицу !!! - это перенесение DB2 после преобразования SQL Server давно).Я разработал диаграмму классов, которая создает пять объектов из этой таблицы на разных уровнях агрегации.В своем исследовании того, что делать в этих ситуациях, я сузил его до использования «QueryView» в моем слое MSL или «DefiningQuery» в моем слое SSDL для создания сущностей, которые мне нужны из этой монолитной таблицы.Полученные данные должны быть только для чтения.Я бы предпочел вернуть правильную сущность, но анонимные типы или dbdatarecord были бы в порядке.

Я попытался использовать QueryView в MSL, где моя сущность определена в CSDL, но MSL продолжает восстанавливаться, и мои измененияпотерял, когда я собираю.Почему?

Кто-нибудь может подсказать, что мне здесь делать?Является ли использование DefiningQuery или QueryView предпочтительным в этой ситуации?Любой вклад в сохранение этих изменений после обновления моей модели из базы данных или компиляции также будет очень полезен.

1 Ответ

2 голосов
/ 01 апреля 2011

QueryView не должен регенерироваться.Я не уверен, как QueryView ведет себя, когда вы делаете обновление из базы данных.Я уверен, что DefiningQuery будет удалено при выполнении обновления из базы данных, поскольку DefiningQuery определено в SSDL, который полностью удаляется при обновлении из базы данных.У меня есть некоторый обходной путь для пользовательских DefiningQueries с использованием двух разных EDMX - один только для запросов, а второй для сущностей, обновляемых из базы данных.Общая концепция описана здесь .

Разница между QueryView и DefiningQuery - это уровень, на котором эти конструкции включены.QueryView - это элемент MSL, построенный как пользовательский запрос ESQL поверх существующего объекта , поэтому ваш объект из 120 столбцов должен существовать в EDMX.По неизвестной причине QueryView не имеет поддержки агрегации .DefiningQuery - сборка элемента SSDL как пользовательский запрос SQL.По умолчанию он используется для представлений базы данных (кстати, вероятно, лучший выбор для вас).

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