Запросы с использованием linq в EF6 дают старые значения, в то время как база данных имеет обновленное значение - PullRequest
0 голосов
/ 30 ноября 2018

Запросы с использованием Linq в EF6 дают старые значения, в то время как база данных обновляет значения. В приведенном ниже коде для первого запуска все работает нормально, но после того, как таблица tblReferenceNumber получает новые строки, запрос возвращает только старые значения, аЯ ожидаю, что он получит в том числе новые записи.

AuthDBEntities db = New AuthDBEntities()
tblReferenceNumber LRefNum = db.tblReferenceNumber.OrderByDescending(ab => ab.ID).First();
string lrNum = LRefNum.ReferenceNumber;

Почему я получаю старые значения?Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Каждый экземпляр DbContext имеет кеш.Если вы используете тот же экземпляр db, что и в прошлый раз, когда получили эту запись, вы получите кэшированные данные.

Вы можете использовать:

db.Entry(LRefNum).Reload();

длязаставить его получать свежие данные.

Подробнее о кэшировании здесь: http://codethug.com/2016/02/19/Entity-Framework-Cache-Busting/

Но это также поднимает вопрос, почему вы получаете одну и ту же запись дважды с одним и тем же экземпляром db.Возможно, вы объявили db статическим?

0 голосов
/ 30 ноября 2018

Когда вы используете .First (), вы материализуете этот запрос и загружаете данные в память.Поэтому, когда вы пытаетесь получить значения из LRefNum, вы обращаетесь к данным в памяти, а не к базе данных.

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