public DataSet Save(Dictionary <string, LibChangeRecord> changeRecord, Dictionary <string, string> extendParam = null) { if (extendParam != null && extendParam.Count != 0) { foreach (var item in extendParam) { ExtendBcfParam[item.Key] = JsonConvert.DeserializeObject(extendParam[item.Key], RegisterBcfParamType[item.Key]); } } this.DataSet = (DataSet)LibBillDataCache.Default.Get(this.ProgId); DataSetManager.ChangeDataHandle(this.DataSet, changeRecord, this.ManagerMessage); LibBillDataCache.Default.AddBillData(this.ProgId, this.DataSet); LibDBTransaction trans = this.DataAccess.BeginTransaction(); try { CheckDataHelper.CheckData(this); this.BeforeUpdate(); DataSetManager.SubmitData(this.DataSet, this.DataAccess); this.AfterUpdate(); if (this.ManagerMessage.IsThrow) { trans.Rollback(); this.DataSet.RejectChanges(); LibBillDataCache.Default.AddBillData(this.ProgId, this.DataSet); } else { trans.Commit(); LibBillDataCache.Default.Remove(this.ProgId); } } catch { trans.Rollback(); this.DataSet.RejectChanges(); LibBillDataCache.Default.AddBillData(this.ProgId, this.DataSet); throw; } this.AfterCommintData(); this.AfterChangeData(this.DataSet); this.DataSet.AcceptChanges(); return(this.DataSet); }