Oracle LINQ(Oracle.ManagedDataAccess.EntityFramework version =“ 12.1.2400)中似乎存在一个错误,即重用上下文(我不重用上下文:这是我继承的代码)意味着如果查询是在视图V_MYVIEW上执行,然后在同一视图上执行第二次查询,返回第一次执行该查询的结果。我继承的代码使用Unity将上下文插入Web线程的生命周期。
我通过使用“ 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中的错误,不是吗?