Golden Basim Ответов: 2

Почему просмотр данных не отображается корректно в gridview ?


привет,
у меня есть представление MySQL :
(4 запись)

sDate , количество , сумма
2019-04-01, 2, 600.0000
2019-04-02, 1, 4000.0000
2019-04-03, 2, 1400.0000
2019-04-04, 1, 3500.0000


я пытаюсь показать эти данные в Gridview с помощью EF6
var Purchases = DB1.view_purchases_amount_per_day.Where(x => x.sDate >= FirstDayOfMonth &&
                                       x.sDate <= LastDayOfMonth);

view_purchases_amount_per_dayBindingSource.DataSource =  Purchases.ToList();



но появляются только первая и вторая записи лебедки (дважды) :
sDate , количество , сумма
2019-04-01, 2, 600.0000
2019-04-02, 1, 4000.0000
2019-04-01, 2, 600.0000
2019-04-02, 1, 4000.0000

Что я уже пробовал:

я попытался manully проверить результат, но та же проблема:
foreach(var  p in Purchases.ToList())
{
    string aaa = p.sDate.ToString();
   string aaa11 = p.Count.ToString();
   string aaa22 = p.Amount.ToString();
}




я сделал предисловие без него .Где() и результат имеют одну и ту же проблему
var Purchases1 = DB1.view_purchases_amount_per_day;
          foreach(var p in Purchases1)
          {
              string date = p.sDate.ToString();
              string count = p.Count.ToString();
              string amount = p.Amount.ToString();
          }

Gerry Schmitz

Вы обвиняете сетку или запрос?

Golden Basim

проблема с запросом ... я проверил запрос в foreach, чтобы увидеть результат для каждой записи ..

#realJSOP

Вы проверили, что данные в вашей базе данных не дублируются каким-либо образом?

Golden Basim

да я уверена

#realJSOP

И вы убедились, что получаете ожидаемые данные без ошибок в вашем наборе данных?

Golden Basim

данные верны я проверил их с помощью верстака

2 Ответов

Рейтинг:
17

Richard Deeming

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

Эф использует Личность карту узор [^Когда он пытается загрузить третью строку (Count = 2), он думает, что уже загрузил эту запись. Он игнорирует данные из базы данных и возвращает вместо них уже загруженную сущность.

Вам необходимо изменить тип сущности, чтобы иметь составной первичный ключ на основе sDate и Count вместо. И если эта комбинация столбцов не уникальна, то вам нужно будет добавить новый уникальный столбец в ваше представление и установить его в качестве первичного ключа для вашего типа сущности.

sql - использование представления без первичного ключа с переполнением стека сущностей[^]


Golden Basim

это работает спасибо

Maciej Los

5ed!

Рейтинг:
1

#realJSOP

0) ваш запрос linq не имеет смысла, потому что каждый день находится между первым и последним днем месяца. Может быть, вы хотели сравнить только месяц? (Мы не можем видеть, что такое Варс LastDayofMonth и FirstDayOfMonth да, но я предположил, что это дата-время.) Может быть, лучшие имена были бы StartDate и EndDate?

1) Если вы сделали а foreach в вашем списке и получили те же результаты, данные каким-то образом дублируются до того, как вы доберетесь до своего .Where() пункт.

2) Вы знаете, что можете добавить .ToList() к вашим услугам .Where() оговорка и сохранить себя как ТЭП. Так ведь?


Golden Basim

0) я проверил это во время отладки

 FirstDayOfMonth =  {01/04/2019 12:00:00 ص} LastDayofMonth = {30/04/2019 12:00:00 ص} <pre>
1) Да, я сделал foreach, прежде чем добраться до него .Где(), и данные имеют ту же проблему.( он повторяет первую и вторую запись дважды , у меня есть 4 записи в представлении)