C#Oracle LINQ查询在给定视图上重用第二个查询的上下文返回第一个查询的结果

时间:2019-01-07 11:59:05

标签: c# oracle linq

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中的错误,不是吗?

0 个答案:

没有答案