现在的位置: 首页 > 综合 > 正文

LINQ 撤消InsertOnSubmit操作

2012年05月12日 ⁄ 综合 ⁄ 共 1185字 ⁄ 字号 评论关闭
使用全局的DataContext 当调用SubmitChanges()
如果这个错误发生过一次,后面的每次操作都会报同样的错误。
 
 
设置了断点之后,发现当第一次错误发生后,dc(DataContext) 的 dc.GetChangeSet() 结果里,那个错误结果一直存在,而且这个 dc.GetChangeSet().Inserts / Deletes / Updates 都是只读的,无法直接通过这些东西来取消 之前的操作。
 
今天又搜了一下,找到个VB.NET的代码,改了改,很好用:
        private void CancelDeleteAndInsert(DBDataContext dc) {
            ChangeSet ch = dc.GetChangeSet();
 
            foreach( Object ins in ch.Inserts ) {
                dc.GetTable(ins.GetType()).DeleteOnSubmit(ins);
            }
 
            foreach( Object del in ch.Deletes ) {
                dc.GetTable(del.GetType()).InsertOnSubmit(del);
            }
        }
 
        private void CancelUpdate(DBDataContext dc) {
            ChangeSet ch = dc.GetChangeSet();
            foreach( Object up in ch.Updates ) {
                dc.Refresh(RefreshMode.OverwriteCurrentValues , up);
            }
        }
 
 
 
调用
------------------------
            try {
                sr = new CSK_Store_SearchKeywordsRule();
                sr.Input = input;
                sr.KeywordsID = gw.ID;
                dc.CSK_Store_SearchKeywordsRule.InsertOnSubmit(sr);
                dc.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);//必须在这里提交,以免后面数据重复.
            } catch( Exception ex ) {
                MessageBox.Show(ex.Message);
                CancelDeleteAndInsert(dc);
                CancelUpdate(dc);
                dc.SubmitChanges();
            }

抱歉!评论已关闭.