.net .toLookup中的数据库访问 - 它会产生表锁吗?

时间:2015-06-08 13:20:39

标签: c# .net linq odp.net

我有以下代码:

ILookup<string, costcenterdata> areas = p_data.CostcenterDatas.ToLookup(p => OracleDataProvider.GetAreaForClient(p_data.ClientID), p => p);

它需要收集pocos并生成查找。为了确定密钥,它进入ORACLE表并从数据栏执行select foo。 没有什么花哨。这是在GetAreaFromClient中完成的,它与ODP.net打开连接,读取,关闭连接。没有实体框架或其他新奇的东西。

但有时似乎会产生锁定。上面的代码无休止地等待,最后,我们必须取消数据库中的连接。

toLockup可以以某种方式产生可能会或可能不会产生此锁的并行访问吗?

1 个答案:

答案 0 :(得分:0)

Oracle的锁定/阻止更类似于sql server的快照隔离,因此不应该阻止简单的选择。

你确定这种方法只是做一个选择,或者它的连接没有被用于别的东西吗?

在任何情况下,dba都应该能够帮助您确定连接被阻止的原因。您也可以尝试查看自己是否拥有以下内容的权限:

select 
   ao.object_name,
   ao.object_type,
   s.sid,
   s.username,
   s.status,
   s.osuser,
   s.machine,
   s.program,
   s.module,
   s.wait_time,
   s.seconds_in_wait,
   lo.inst_id,
   s.*, lo.*
from
   gv$locked_object lo ,
   gv$session s,
   all_objects ao
where
   s.sid = lo.session_id
and
   lo.object_id = ao.object_id
and s.username = 'connectionUserName';