RIA EntityQuery дублирует строки, где совпадает одно из значений - PullRequest
1 голос
/ 02 сентября 2011

В моем приложении я выполняю запрос объекта. Если я использую профилировщик SQL, ловлю сгенерированный SQL-запрос и запускаю его вручную, он дает ожидаемые результаты. Например

Val     Date
68  2011-05-31 00:00:00.000
48  2011-05-30 00:00:00.000
92  2011-05-29 00:00:00.000
52  2011-05-28 00:00:00.000
32  2011-05-27 00:00:00.000
32  2011-05-26 00:00:00.000
52  2011-05-25 00:00:00.000
81  2011-05-24 00:00:00.000

Если я вставлю точку останова в свой код и посмотрю на то, что содержит LoadOperation.Entities, я замечу, что, когда фигура 'Val' для записи уже появилась (IE, как 52 выше), тогда коллекция LoadOperation.Entities использует данные из предыдущей записи (со значением 52), а не фактическая дата. Таким образом, в приведенных выше данных мой LoadOperation.Entities выглядит следующим образом (обратите внимание, что даты теперь повторяются, по-видимому, потому что 'Vals' произошли ранее)

68  2011-05-31 00:00:00.000
48  2011-05-30 00:00:00.000
92  2011-05-29 00:00:00.000
52  2011-05-28 00:00:00.000
32  2011-05-27 00:00:00.000
32  2011-05-27 00:00:00.000
52  2011-05-28 00:00:00.000
81  2011-05-24 00:00:00.000

Кто-нибудь знает, почему это происходит?

Мой EntityQuery выглядит как

    var appDataQuery = context.GetVwKeyDatasQuery().Where(d => d.KPIDate <= OverViewDate && d.GELID == GelID && d.ClockworkID == ClockWorkID).OrderByDescending(d => d.KPIDate);

И это создает правильный T-SQL, который при выполнении в SQL Query Analyzer возвращает правильные значения.

Остальной код

    LoadOperation lo = context.Load<vwKeyData>(appDataQuery);
    lo.Completed += new EventHandler(LoadOperation_Completed);

EventHandler -

    public void LoadOperation_Completed(object sender, EventArgs e)
    {
    LoadOperation<vwKeyData> histResults = sender as LoadOperation<vwKeyData>;
    int _count = 0;
    foreach (vwKeyData v in histResults.Entities)
    {.......

К этому моменту HistResults.Entities уже неверно. Буду признателен за любую помощь, так как это испортит некоторые графики, над которыми я работаю.

Спасибо

M

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Ответ, как указано выше.Каждый столбец, необходимый для уникальной идентификации строки, должен быть задан как ключ сущности в модели.

(щелкните правой кнопкой мыши столбец в конструкторе модели и выберите ключ сущности).

1 голос
/ 02 сентября 2011

Вам необходимо установить следующее.

context.vwKeyData.MergeOption = MergeOption.OverwriteChanges;

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

...