Пользовательские объекты EF4 в том же EDMX - PullRequest
0 голосов
/ 08 февраля 2011

У меня есть файл edmx, который на 100% отражает мою схему БД.Наряду с этим мне нужно создать несколько пользовательских сущностей на основе существующих, во многом как представление, которое объединит поля нескольких энтитов в один.

Проблема в том, что это не совсем работает.Я пробовал несколько подходов, но это всегда давало мне конфликты с фактическими объектами, уже имеющимися в edmx.

Мне нужны те объекты, которые отражают мою схему БД, поэтому мне нужно создать другой файл edmx для хранения моего пользовательскогоentites и избегать коллизий?

Я также хотел бы:

  • создать хранимую процедуру, но затем, если мне нужно отфильтровать результат SP, я должен добавить поддержку serach на SPиз получения всех строк и фильтрации с помощью Linq2Objects ... не будет делать этого!
  • создаст View, и этот будет работать очень хорошо, но я хочу попробовать сделать это, используя конструктор EF4 идержите все в одном месте.

Может ли кто-нибудь указать мне на некоторые примеры?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2011

Я думаю, что вы описываете это представление, так что это, вероятно, правильный путь.

Вы можете сохранить код представления в edmx, используя узел DefiningQuery. Вам не нужно создавать представление в базе данных. Однако эта функция не поддерживается дизайнером, вам нужно отредактировать edmx вручную. Внесенные вами изменения должны сохраняться, если вы обновляете edmx из базы данных с помощью конструктора.

Подробности здесь:

http://msdn.microsoft.com/en-us/library/cc982038.aspx

http://blogs.msdn.com/b/davidebb/archive/2010/10/01/the-easy-way-to-create-an-entity-framework-defining-query.aspx

Было бы проще просто создать представления в базе данных и позволить разработчику найти и смоделировать их.

Этот объект будет доступен только для чтения, но, конечно, вы можете назначить SP для UPDATE / INSERT / DELETE, если вы хотите поддерживать изменения через это представление.

1 голос
/ 08 февраля 2011

Вы не можете определить две сущности, основанные на одной и той же таблице, за исключением особых случаев (разбиение таблицы, отображение по иерархии). В этом случае вы должны использовать DefiningQuery в соответствии с предложением @James или QueryView . Разница в том, что DefiningQuery определен в модели хранения, и это обычный SQL. QueryView определен в концептуальной модели и ESQL определен поверх уже существующих сущностей. QueryView поддерживает только некоторые функции ESQL (например, не поддерживает агрегатные функции). В обоих случаях вам нужно изменить EDMX напрямую (XML), эти функции не поддерживаются в конструкторе.

Представление базы данных, упомянутое @James, также возможно, если вы не хотите использовать эти расширенные функции EF. Вы также можете просто выставить предопределенные запросы в контексте вашего объекта и отобразить проекцию возврата на пользовательский тип.

Помните, что ни один из этих методов не позволит вам изменять, вставлять или удалять данные.

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