Просмотр данных в базе данных отличается от того, что генерирует EF

1

У меня возникла проблема с использованием выражения() из Entity Framework, когда я объединять многие таблицы в столбце с идентификатором события, поэтому я решил сделать представление в базе данных вместо этого, и мне просто нужно потянуть его в EF и отобразить на datagrid.

И EF дал мне проблему, я понятия не имею, как решить, даже когда я вытаскиваю SQL, который генерирует EF, я все еще не вижу ничего странного в команде sql из него...

Таким образом, мое представление в базе данных генерирует что-то вроде этого:

oID     TIME     LOC     NETVAL     INDIVALUE     COUNT
01     10:00     A       0.803      0.803         6
02     8:00      B       1.164      1.164         1
02     8:00      B       1.164      1.252         1
02     8:00      B       6.012      1.164         1
02     8:00      B       6.099      6.099         1

Но, когда я использую EF toList(), вид:

var query = context.MY_VIEW.toList();
datagridview1.DataSource = query;

Я получаю это:

oID     TIME     LOC     NETVAL     INDIVALUE     COUNT
01     10:00     A       0.803      0.803         6
02     8:00      B       1.164      1.164         1
02     8:00      B       1.164      1.164         1
02     8:00      B       1.164      1.164         1
02     8:00      B       1.164      1.164         1

Я также проверил сгенерированный sql на EF и не вижу ничего ненормального, просто простых вложенных операторов select from....

  • 1
    Похоже, вам не хватает PrimaryKey.
  • 0
    О, так я должен сделать первичный ключ для представления тоже? Насколько мне известно, столбцы данных из таблиц, которые я использовал для создания представления, не имеют ключа.
Показать ещё 4 комментария
Теги:
database
entity-framework

2 ответа

0
Лучший ответ

Что касается ответа на antar125. Это не очень полезно для меня, потому что я использую базу данных Oracle, и Coalesce не работает для меня. Я нашел несколько других вариантов, и я надеюсь, что это поможет людям, которые ищут решение этой проблемы.

Обнаружена та же проблема, и люди обсуждают здесь: Дублировать строки при привязке данных с LINQ к объектам

http://markcoleman.tumblr.com/post/25026903967/entityframework-and-a-view-with-no-primary-key

Опция: http://elegantcode.com/2012/03/15/querying-entityframework-views-without-a-key/ Это не работает для меня, поскольку это дает мне исключение, говоря, что нет представления в db, может работать для других.

Другой способ отобразить представление происходит из старого db (если вы просто хотите его просмотреть) полностью обходит EF. Когда вы бросаете контейнер datagridview или w/e, который вы используете, пожалуйста, @окна дизайнера, привязывайте его к представлению. Это верно для меня :)

Милая!!

1

Вам необходимо установить первичный ключ в вашем представлении. Похоже, что EF использует поле oID в качестве первичного ключа по умолчанию. Вам нужно будет установить первичный ключ, а затем обновить модель. См. Эту ссылку http://girlfromoutofthisworld.com/entity-framework-and-setting-primary-keys-on-views/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню