2012-04-19 1 views
2

У меня есть таблица, которая используется во всем приложении для Entity. У меня есть представление, которое возвращает идентичный набор столбцов, но на самом деле является объединением на себе, чтобы попытаться обойти некоторую плохую нормализацию (приложение является большим и частично из моих рук, эта часть неизбежна).Просмотр с использованием того же типа, что и таблица

Возможно ли, чтобы Entity 4 рассматривал представление, которое точно похоже на таблицу того же типа, чтобы я мог использовать это представление для заполнения коллекции того же типа? This question, кажется, указывает, что это возможно в nhibernatem, но я не могу найти ничего подобного для сущности. Это будет дополнительный бонус свойств навигации, которые все еще можно использовать для Include(), но это необязательно (я всегда могу вручную подключиться).

+0

Невозможно прямо сейчас. Вы должны сопоставить другой тип и выполнить внутреннее копирование - например, с Automapper - для сохранения изменений. Я думаю, что ссылка NHibernate рассказывает об этом, кстати. Было бы неплохой идеей, однако, иметь один тип с разными способами чтения и сохранения. –

ответ

0

Поскольку EF работает с сопоставлениями объектов с объектами базы данных, это невозможно. Вам нужно что-то вроде изменения запрашиваемой сущности базы данных динамически, и AFAIK это невозможно без ручного изменения контекста объекта.

0

Наверняка во время работы EF все равно, пока он может обрабатывать представление, как если бы он был полностью отдельной таблицей. Два возможных проблем, которые я предвижу являются:

  1. Инструмент: Наш мастер действительно позволяет Вам выбрать представления, делая обратное проектирование (т.е. базы данных-первых). Определенно, если вы можете использовать «первый код перед существующей базой данных», вы можете просто притворяться, что представление является просто таблицей, но вы не получите никакой справки по созданию или миграции базы данных.

  2. Обновления: в общем случае вы можете выполнять обновления для представления, настраивая сопоставление процедур хранилища (которое доступно в EF Designer из v1 или в Code First, начиная с EF6). Вы также можете сделать свой просмотр обновляемым напрямую или использовать вместо него триггеры (см. «Обновляемые виды» here для получения дополнительной информации). Если я правильно помню, SQL, сгенерированный EF для извлечения данных сгенерированных данных (например, для столбцов идентификации), в некоторых случаях несовместим с триггерами-исключениями. Еще одна альтернатива заключается в том, чтобы ваше приложение рассматривало представление как доступное только для чтения и выполняло все обновления через фактическую таблицу, которую вы могли бы отображать как отдельный объект. Имейте в виду, что объекты в памяти для представления и исходной таблицы не будут синхронизироваться.

Надеюсь, это поможет!

+0

Я понимаю, что мой ответ немного неполный, поскольку я не помню всех деталей вещей, которые могут пойти не так, но я планирую следить за ними. Просто попробуйте как можно скорее предоставить некоторую полезную информацию. – divega

+0

Обновлено с дополнительной информацией. Первоначально я пропустил упоминание о том, что вы можете обновлять хранимые процедуры против представления. – divega

Смежные вопросы