Перебор результатов сущностей LINQ - PullRequest
3 голосов
/ 20 июня 2009

У меня есть, как мне показалось, очень простой кусок кода, но результаты меня сбивают с толку. Я запрашиваю объекты с помощью LINQ, а затем перебираю результаты для создания массива. Я наблюдаю за трафиком и из базы данных, и там все выглядит хорошо. Когда я копирую запрос, который LINQ отправляет в SQL, и запускаю его непосредственно против SQL, я получаю ожидаемые результаты. Тем не менее, когда я перебираю результаты - или даже наблюдаю за результатами - каждая запись абсолютно одинакова. Это НЕ , что возвращает SQL. Что я делаю не так?

var eventList = from e in entityContext.AuctionSet select e;

ArrayList DayArray = new ArrayList();
int i = 0;

foreach (Auction ae in eventList)
{
    // If I put a watch on eventList all the records are the same!
    Auction temp = ae; // Even tried copying to a temp value per another solution

    // Even though the records are different in the database, 
    // and the correct number of records are returned, EVERY "ae" instance 
    // has the exact same values!
    DayArray.Add(new {
                id = i,
                title = temp.County.ToString()
                });
            i++;
 }

Спасибо!

РЕДАКТИРОВАТЬ: Забыл упомянуть, что сущности исходят из представления, что имело бы смысл, учитывая комментарий о первичном ключе.

1 Ответ

7 голосов
/ 20 июня 2009

Возможно, вы неправильно настроили первичный ключ, так что EF считает что-то первичным ключом, когда на самом деле каждая строка имеет одинаковое значение? Важно отметить, что EF обязан предоставлять вам один и тот же экземпляр каждый раз, когда он видит объект с тем же типом + первичным ключом, который он видел раньше.

Так что, если все ваши записи выглядят так:

id   | title | ...
-----+-------+-------
1    | Foo   | ...
1    | Bar   | ...
1    | Baz   | ...
...

и если EF считает, что id является первичным ключом, он будет возвращать вам один и тот же объект каждый раз - поэтому вы увидите Foo, Foo, Foo ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...