/// <summary> /// /// </summary> /// <param name="values"></param> /// <returns></returns> protected override int ExecuteInsert(IDictionary values) { if (owner.SaveFunction == null) throw new DelegateNotFoundException("SaveFunction", "The insert function doesn't implemented."); var eventArg = new SavingEventArgs(owner.SourceType, values); owner.OnInserting(eventArg); if (eventArg.Cancel) return 0; var insertingActionEvent = new ActionEventArgs<SavingEventArgs, IPersisterResult>(eventArg, owner.SaveFunction); try { var result = insertingActionEvent.Execute(); if (result.QueryException != null) { owner.OnExecutionQueryError(new QueryResultEventArgs(result)); return -1; } owner.OnInserted(EventArgs.Empty); OnDataSourceViewChanged(EventArgs.Empty); } catch (Exception) { return -1; } return 1; }
/// <summary> /// /// </summary> /// <param name="parameter"></param> /// <returns></returns> public IPersisterResult SaveFunction(SavingEventArgs parameter) { ITransactionProvider tr = customDAO.GetTransactionProvider(); lock (customDAO) { try { tr.BeginTransaction("SaveFunction", IsolationLevel.ReadCommitted); var metadata = customDAO.GetPersistentClassInfo(parameter.SourceType); var obj = Activator.CreateInstance(parameter.SourceType); var dic = parameter.Values.Keys.Cast<object>().ToDictionary(current => current.ToString(), current => parameter.Values[current]); metadata.SetPropertyValues(obj, dic, EntityMode.Poco); customDAO.MakePersistent(obj); tr.CommitTransaction(); return new PersisterResult(parameter.SourceType, 1); } catch (Exception ex) { tr.RollbackTransaction(ex); return new PersisterResult(parameter.SourceType, new ExecutionQueryException("Error on executing the saving function.", "SaveFunction", ex)); } } }
internal void OnInserting(SavingEventArgs e) { if (Inserting != null) Inserting(this, e); }