public override void ProcessMethodCall(IOqlSyntaxContext callContext, MethodCallExpression methodCall) { Expression x = methodCall.GetArgument(1); if (x.NodeType == ExpressionType.MemberInit) { m_change_set = new MemberInitChangeSet(x as MemberInitExpression); return; } object obj = x.GetValue(); if (obj is IDataChangeSet) { m_change_set = obj as IDataChangeSet; return; } m_change_set = new ObjectChangeSet(obj).ChangeAllProperties(); }
public async Task <IDataResult <T> > ProcessUpdate(IDataChangeSet <T> changeSet) { IDataValidationStrategy <T> validator = CreateValidator(); using (TransactionScope(changeSet.Instance)) { if (await IsAccessForUpdate(changeSet.Instance)) { IDataResult <T> result = validator.Validate(changeSet); if (result.Ok) { await ApplyUpdate(changeSet); await UpdateComplete(changeSet); } return(result); } return(validator.Context.CriticalError(changeSet.Instance, "PermissionDenied")); } }
protected abstract Task UpdateComplete(IDataChangeSet <T> changeSet);
protected abstract Task ApplyUpdate(IDataChangeSet <T> changeSet);