C# .NET不支持ORA-0001多次调用ORACLE

C# .NET不支持ORA-0001多次调用ORACLE,c#,sql,oracle,asp.net-mvc-3,C#,Sql,Oracle,Asp.net Mvc 3,我注意到在.NET应用程序(MVC3和Web From)中,有时某些被调用的过程会执行多次。 (这是一个非常简单的(点击链接)调用,因此在c#中不会出现问题) 链接点击代码示例: try{ using (var context = new DB()) { context.some_procedure(user_id, order_id,

我注意到在.NET应用程序(MVC3和Web From)中,有时某些被调用的过程会执行多次。 (这是一个非常简单的(点击链接)调用,因此在c#中不会出现问题) 链接点击代码示例:

try{
     using (var context = new DB())
                {                                       
                    context.some_procedure(user_id, order_id, "string");
                }
}
catch(Exception ex)
{
     Log.Error("some_procedure " + ex.Message + ex.InnerException);
     return null;
}
在Oracle中,过程也会处理重复项。 我必须补充的是,iduser列和idorder列在表1上具有pair unique index约束(pair\u unique\u const)

仍然错误ORA-0001不时发生,这表明违反了pair_unique_const(唯一约束索引),并且可能发生重复(如果我没有设置pair_unique_const)

此表中没有其他插入项! 因此,我假设.NET在一毫秒内对click ocational执行多个调用。 也可能是ODAC的错,我不知道

因为我对这两列有唯一的约束,所以插入不会发生。 另外,在c#中进行事务调用,然后在完成所有操作后提交也有助于解决问题

但我只是想知道为什么会这样? 单击链接调用只应发出一个请求


提前谢谢你

是否有多个用户同时使用此web应用程序?然后,它们可能会在同一瞬间插入相同的值:两者都获得0计数并尝试插入-一个将失败。此web应用程序有多个用户,但情况并非如此。检查用户的身份是否唯一,订单的id是否唯一。我添加了专栏的专有名称,因此它更能自我解释。
some_procedure(number user_id, number order_id, varchar2 string)
.
.
.
    SELECT COUNT(*)
             INTO var_exists
             FROM table1 WHERE
             iduser = user_id and idorder = order_id;

IF var_exists = 0 then 

insert into table1 (id, iduser, idorder, text)
select(sequence.nextval, user_id, order_id, string);

Commit;

end if;
.
.
.