Entity Framework ListObject

#c# #entity-framework #list

#c# #entity-framework #Список

Вопрос:

Я получил простую функцию, которая возвращает список DatabaseViewName

 public List<DatabaseViewName> GetAllItems(string article)
    {
        List<DatabaseViewName> visi;

        var cus = from s in _entities.DatabaseViewName where
        s.articleNr == article select s;
        visi = new List<DatabaseViewName>(cus);

        return visi;
    }
  

Первый запуск прошел нормально. Я получаю список с желаемыми объектами.

Первая статья

Второй запуск с другой статьей (с большим количеством свойств) по-прежнему содержит 5 элементов списка из первого запуска. Не дополнительно!! Остается только значение свойств… Я ЗНАЮ ПОЧЕМУ, но не могу это исправить! Код правильный, пожалуйста, не пытайтесь сказать мне что-то еще. EntityFrameworke кэширует информацию для экономии времени. Мне нужно отключить это кэширование… Как?

Раздел

Спасибо!

PS: Не имеет значения Список<> или массив

видите, проблема в этом:

 var ese = (from s in _entities.DataBbseViewName where 
s.ArticleNr == article select s).ToArray();
  

в «ese» значение не изменилось. Я могу запускать его 100 раз со 100 различными статьями.
Значения первого запуска будут сохранены.

Комментарии:

1. Сколько записей в базе данных для двух разных статей?

2. и сколько элементов вы получаете в cus при запуске 2-го раза?

3. возможно ли, что вы смотрите на первый экземпляр visi и во второй раз тоже? (Вы не изменяете список — вы просто возвращаете его — кстати: не возвращайте списки — возвращайте неизменяемые элементы, такие как массивы или новые списки только для чтения)

4. 1 раз в cus, И нет, я не смотрю на первый экземпляр.

5. Как выглядит код, который вы используете для вызова метода getAllItems(string article) с помощью?

Ответ №1:

Понял! Вы можете установить для запроса значение без отслеживания!

 var ese = (from s in _entities.DataBbseViewName where
s.ArticleNr == article select s).ToArray().AsNoTracking();
  

Смотрите