Кажется, что в Oracle LINQ есть ошибка (Oracle.ManagedDataAccess.EntityFramework version = "12.1.2400) в том, что повторное использование контекста (я не использую контексты: это был код, который я унаследовал) означает, что если запрос выполняется в представлении V_MYVIEW, затем второй запрос в том же представлении возвращает результат первого выполнения запроса. Унаследованный мной код использует Unity для вставки контекста в жизненный цикл веб-потока.
Я исправил это с помощью выражения «using (var context = new MyContext)» вместо введенного контекста. Просто любопытно, сталкивался ли кто-нибудь с таким поведением с Oracle LINQ и альтернативным решением.
оригинальный код:
public async Task<List<Thing>> GetThings(string search1)
{
var list = injectedContext.V_MYVIEW
.Where(p=>p.SEARCH1 == search1)
.Select(p => new ThingModel
{
Thing1 = p.THING1,
}).ToListAsync();
return list;
}
новый код:
public async Task<List<Thing>> GetThings(string search1)
{
using (var context = new MyContext())
{
var list = await context.V_MYVIEW
.Where(p=>p.SEARCH1 == search1)
.Select(p => new ThingModel
{
Thing1 = p.THING1,
}).ToListAsync();
return list;
}
}
Я никогда не использую контексты повторно, так как оператор using очень аккуратен, и аккуратно его удаляет (поэтому освобождает ресурсы для GC), а контексты очень дешевы в создании. (а также это рекомендуемая практика по всем этим причинам).
Тем не менее, это должно быть ошибкой в Oracle LINQ, не так ли?