У меня возникла проблема с использованием выражения() из 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....
Что касается ответа на 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, который вы используете, пожалуйста, @окна дизайнера, привязывайте его к представлению. Это верно для меня :)
Милая!!
Вам необходимо установить первичный ключ в вашем представлении. Похоже, что EF использует поле oID
в качестве первичного ключа по умолчанию. Вам нужно будет установить первичный ключ, а затем обновить модель. См. Эту ссылку http://girlfromoutofthisworld.com/entity-framework-and-setting-primary-keys-on-views/