/// <summary> /// /// </summary> /// <param name="keys"></param> /// <param name="oldValues"></param> /// <returns></returns> protected override int ExecuteDelete(IDictionary keys, IDictionary oldValues) { if (owner.DeleteFunction == null) throw new DelegateNotFoundException("DeleteFunction", "The delete function doesn't implemented."); if (owner.IdentifierFunction == null) throw new DelegateNotFoundException("IdentifierFunction", "The identifier function doesn't implemented."); var eventArg = new DeletingEventArgs(owner.SourceType, owner.IdentifierFunction.Invoke(keys)); owner.OnDeleting(eventArg); if (eventArg.Cancel) return 0; var deletingActionEvent = new ActionEventArgs<DeletingEventArgs, IPersisterResult>(eventArg, owner.DeleteFunction); var result = deletingActionEvent.Execute(); if (result.QueryException != null) { owner.OnExecutionQueryError(new QueryResultEventArgs(result)); return -1; } owner.OnDeleted(EventArgs.Empty); OnDataSourceViewChanged(EventArgs.Empty); return 1; }
/// <summary> /// /// </summary> /// <param name="parameter"></param> /// <returns></returns> public IPersisterResult DeleteFunction(DeletingEventArgs parameter) { ITransactionProvider tr = customDAO.GetTransactionProvider(); lock (customDAO) { try { tr.BeginTransaction("DeleteFunction", IsolationLevel.ReadCommitted); int res = customDAO.MakeHQLQuery(string.Format("delete {0} cls where cls.id= :key", parameter.SourceType.Name)) .SetParameter("key", parameter.Key) .ExecuteUpdate(); tr.CommitTransaction(); return new PersisterResult(parameter.SourceType, res); } catch (Exception ex) { tr.RollbackTransaction(ex); return new PersisterResult(parameter.SourceType, new ExecutionQueryException("Error on executing the delete function.", "DeleteFunction", ex)); } } }
internal void OnDeleting(DeletingEventArgs e) { if (Deleting != null) Deleting(this, e); }