Различие результатов структуры объекта для представлений базы данных
У меня есть одно конкретное представление, созданное в моей базе данных (объединяет около 5-6 таблиц с левым соединением). Это представление добавляется в мой edmx (entity framework 1.0). Недавно я заметил, что одна из записей столбцов, полученных с использованием edmx (linq для сущностей, а затем ToList()), дублируется несколько раз, хотя в представлении базы данных они были разными
Column-N (Expected result/ result from DB view)
---------
data1
data2
data3
data4
data5
Column-N(Actual result generated by entity framework)
---------
data1
data1
data1
data1
data1
Я активировал свой профилировщик SQL, получил запрос, который был отправлен моим приложением на SQL Server, запустил его, и он вернул мне ожидаемый результат.
MSDN имеет аналогичную запись здесь и здесь, но модератор не уточнил, как решить эту проблему. Мой ключ - GUID
Основная причина, по которой вы указали, я думаю правильно, проблема заключается в отображение EF на стороне приложения, поскольку EF различные правила сопоставления объектов с база данных. когда результаты запроса был возвращен из базы данных, EF будет делать сопоставление по заявке памяти в соответствии со своими собственными логика.
Важно принять эту логику учитывайте, когда вы просмотреть запрос в своей базе данных. я подумайте, что вы должны ваш запрос на просмотр.
Я не уверен, что вы отсортировали проблема, если нет, пожалуйста, предоставьте структура базы данных, связанная с этим вопрос и запрос вида, который у вас есть написано.
Спасибо Binze
Кто-нибудь сталкивался с подобной проблемой раньше?
Ответы
Ответ 1
Проблема в том, что с ключом. Вы должны: a) иметь уникальный идентификатор для каждой строки в представлении. и b) сопоставить этот ключ соответственно в edmx. В противном случае, как указывается ваша цитата, логика отображения увидит каждую последующую строку и цифру, что она может использовать тот же экземпляр объекта, который он возвращал до
Ответ 2
Такая же проблема для меня.
Представление Entity View (VReport
) автоматически создавалось с помощью мастера VS2010:
class VReport
Line: int (key)
Desc: string
Date: DateTime
Когда я извлек записи из базы данных, SQL-запрос был сформирован правильно и возвратил ожидаемые (и отчетливые) результаты, но Entity Framework вместо этого вернул много дублированных записей.
Но вместо этого также поле столбца Date должно было бы partecipate в образовании Entity KEY
Итак, чтобы решить эту проблему, я изменил свойство поля из Entity Key: false → true
class VReport
Line: int (key)
Desc: string
Date: DateTime (key)