Почему представление SQL-сервера не подходит для работы с Entity Framework - PullRequest
0 голосов
/ 06 июня 2018

я читал эти статьи

http://a4academics.com/interview-questions/52-dot-net-interview-questions/973-entity-framework?showall=&start=2

они сказали

Ниже приведены пункты, которые мы можем рассмотреть для увеличения производительности -

Отключите отслеживание изменений, если оно не требуется.

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

Избегайте использования представлений

Получите необходимые данные из базы данных.

1) что они пытаются обозначить, избегайте использования представлений.

мы можеместь представления в БД и что мы можем сослаться на edmx.Так в чем же проблема, если мы вызываем view по EF вместо таблицы?

Мне бы хотелось знать, что происходит, когда мы вызываем view по EF.

Спасибо

1 Ответ

0 голосов
/ 07 июня 2018

Действительно, проблема only с представлениями состоит в том, что они не всегда содержат уникальные первичные ключи-кандидаты.

Представление может содержать строки типа

ID1 ID2 SomeColumn
==================
  1   4          A
  1   5          A
  1   5          B

, гдеоба столбца ID происходят из столбцов таблицы первичного ключа.

При импорте в EDMX EF выведет первичный ключ и может сделать вывод, что { ID1, ID2 } является хорошим кандидатом.Как видите, это не так.В этом случае он также должен включать SomeColumn, но в других случаях может даже не быть уникальной комбинации полей представлений!

В Entity Framework 6 и более ранних версиях EF материализовал идентичные сущности, такие как

  1 4 A
  1 5 A
  1 5 A (!)

Как видите, третья строка дублируется.

Это вызвало большую путаницу среди разработчиков и множество вопросов о переполнении стека.Просто, когда представление содержит правильный уникальный ключ-кандидат, который отображается как первичный ключ в модели EF, вполне нормально использовать представления для только для чтения данных в запросах EF.

Эта запутанная проблема больше не будет устранена в EF6, но ядро ​​Entity Framework (начиная с версии 2.1) добавило поддержку чтения неидентифицируемых данных представления.Представление может быть прочитано в любом типе, и чтение представления просто возвратит строки представления без дублирования, вызванного неуникальными ключами: там являются без ключей.

Тип может быть добавлен кмодель по:

modelBuilder.Query<MyViewDto>().ToView("MyView");

... и используется в запросе LINQ следующим образом:

db.Query<MyViewDto>().Where(x => x.ID1 == 1)

Это будет преобразовано в запрос SQL с предложением WHERE.

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