Linq和DeleteAllOn提交痛苦

时间:2008-12-30 14:58:23

标签: .net linq deleteallonsubmit

以下代码加载演出,清除演出动作集合,然后添加新动作。

            Data.LinqToSQL.Gig dbGig = DBContext.Gigs.Where(x => x.ID == myGigID).SingleOrDefault();

            //Remove all references to the current acts
            if(dbGig.Acts!=null) {
                DBContext.Acts.DeleteAllOnSubmit(dbGig.Acts);
            }

            Data.LinqToSQL.Act dbAct =  new ListenTo.Data.LinqToSQL.Act();
            dbAct.ID = Guid.NewGuid();
            DBContext.Acts.InsertOnSubmit(dbAct);

            DBContext.SubmitChanges();

请注意,每次运行此代码时,myGigID的值都是相同的,因此它总是与我加载的gig相同。

我第一次运行此代码时效果很好,而且我有一次演出。

第二次,dbGig.Acts(一个集合)的计数为0,因此DeleteAllOnSubmit不会删除任何行为。但是在数据库中,这个演出有1个动作!因此,一旦此代码运行,我最终会得到2个动作。

如果我第三次跑,我最终总共有3个动作。

任何想法我做错了什么?

4 个答案:

答案 0 :(得分:2)

尝试在此块的开头打开一个新的DBContext。如果您在第一次和第二次运行时使用相同的上下文,则第二次看不到插入的记录。重置上下文应强制它查看表中的最新行。

答案 1 :(得分:1)

替代gfrizzle的答案是除非你有令人信服的理由这样做,否则在完成所有数据库工作之后不要调用SubmitChanges。

答案 2 :(得分:0)

好吧,你从未真正将新行为与任何演出联系起来 - 是缺少什么?

dbGig.Acts.Add(dbAct);

或者也许:

dbAct.Gig = dbGig;

或带有ids的东西。

即。你确定数据库中的行为是为了演出吗?

答案 3 :(得分:0)

我有类似的问题,我的问题/解决方案是代表数据库表的内部类缺少部分主键。

这似乎工作正常,直到数据库中的数据导致数据库满意的代码中的主键约束。

PT