EF Core 2.2: использовать один и тот же экземпляр DbContext для получения записи из базы данных несколько раз, всегда один и тот же результат - PullRequest
0 голосов
/ 05 июля 2019

Я столкнулся с проблемой: у нас есть проект веб-API ASP.NET Core 2.2 с EF Core 2.2.Мы используем платформу IOC по умолчанию для создания DbContext с продолжительностью действия.И у нас есть конвейер сокетов, подключенный к нашей службе веб-API ASP.NET.

Я обнаружил, что когда мы изменяем данные в веб-интерфейсе, конвейер сокетов всегда будет получать старый результат (мы используем .FirstOrDefault() для извлечения данных не должно быть проблем с кэшем первого уровня).

Итак, я могу сделать вывод, что это может быть связано с тем, что время жизни области действия для DbContext, поэтому я изменил ее на временное время жизни.,И это работает!Мы получаем измененную запись.

У меня есть два вопроса:

  1. Это поведение DbContext по замыслу? Или, возможно, у меня есть какая-то хитрая проблема в моем коде.
  2. Сколько производительности будет стоить переходный срок службы DbContext стоимость? Поскольку, возможно, я сделаю каждый DbContext переходный процесс

1 Ответ

0 голосов
/ 05 июля 2019

1) Это поведение DbContext по замыслу?

Да

Для каждого элемента в наборе результатов. Если это запрос отслеживания, EF проверяет если данные представляют сущность, уже находящуюся в трекере изменений для экземпляр контекста. Если да, то возвращается существующий объект. Если нет, объект создан, отслеживание изменений настроено, а новый объект вернулся

Как работают запросы

2) Сколько будет стоить переходный срок службы DbContext 101

Очень мало. Особенно в ASP.NET Core, который имеет DbContext Pooling

Так как, возможно, я сделаю каждый переходный DbContext

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

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