接续两次执行delete+insert Into为什么会死锁?

连续两次执行delete+insert Into为什么会死锁??

internal bool AddPendingRloc(Entity.Fun.PendRlocRQ pendRloc, out Message message)
        {
            message = new Message();

            tbMOE_PendRloc db = IDABkgFolder.GetPendRloc(pendRloc.SourceSystem, pendRloc.SourceRef, pendRloc.OwnerTeam);
            tbMOE_PendRloc pr = new tbMOE_PendRloc()
            {
                UpdateBy = pendRloc.OwnerStaff,
                OwnerStaff = pendRloc.OwnerStaff,
                CreateBy = pendRloc.OwnerStaff,
                CreateOn = Now,
                DepartDate = pendRloc.DepartDate,
                NoOfTkt = pendRloc.NoOfYkt,
                Passengers = pendRloc.Passengers,
                SourceRef = pendRloc.SourceRef,
                SourceSystem = pendRloc.SourceSystem,
                UpdateOn = Now,
                OwnerTeam = pendRloc.OwnerTeam,
            };
            if (pr.Passengers.Length > 500)
            {
                pr.Passengers = pr.Passengers.Substring(0, 500);
            }
           // IDABkgFolder.UpdatePendRloc(pr);
            return IDABkgFolder.UpdatePendRloc(pr);
    }


public bool Update(tbMOE_PendRloc updateEntity)
        {
            Delete(updateEntity.SourceRef, updateEntity.OwnerTeam);
            return Add(updateEntity);
        }

public bool Delete(string pnr, string team)
        {
            FilterParams fp = new FilterParams();
            fp.AddParam(tbMOE_PendRloc.Fields.SourceRef, pnr, Enums.Relation.Equal, Enums.Expression.AND);
            fp.AddParam(tbMOE_PendRloc.Fields.OwnerTeam, team, Enums.Relation.Equal, Enums.Expression.AND);
            return base.Delete(fp);
        }

 public new bool Add(tbMOE_PendRloc entity)
        {
            return base.Add(entity);
        }

如果我把不打开注释,执行不会发生死锁,反之,就会。为什么呢
前面已经开启事务,而select也加了with(updlock)
求求大家帮帮忙了
------解决方案--------------------
updlock 已经造成了执行语句的串行化了吧?
------解决方案--------------------
不建议用.NET 事务,你既然开了事务,执行一次后,是不是等于没有 commit ,再执行第二次,是不是就是在等待第一次执行的commint。然而,你的程序里执行第一次时,代码有没有.NET事务的提交。

而且.NET的事务是啥级别的我没研究过,但是,我知道,如果一个人在调试程序,断点停在.Net 事务里,抱歉,所有人对数据库的访问都等着去吧...
------解决方案--------------------
至于三楼说的“不建议用.NET 事务,你既然开了事务,执行一次后,是不是等于没有 commit ,再执行第二次,是不是就是在等待第一次执行的commint。然而,你的程序里执行第一次时,代码有没有.NET事务的提交。”

.NET事物,跟数据库sql级别事物,没啥本质区别吧,类似操作,换做在数据库中执行,不也是一样的么?




create table t
(
id int,
name varchar(20)
)

insert into t values (1,'AAA')

--执行如下代码,注意不提交
begin tran
delete from t where id =1
insert into t values (1,'BBB')

--新开一个查询窗口执行同样的代码
begin tran
delete from t where id =1
insert into t values (1,'BBB')

--第二个窗口的执行肯定被阻塞,这跟什么形式的事物没什么关系的



------解决方案--------------------