public void Add(AbstractChange change) { lock(locker) { if(this.isAdding) throw new CriticalException("Cannot add inside add"); if(this.isProcessing || this.isProcessed) throw new CriticalException("ChangeSet is readonly"); this.isAdding = true; } if(!this.changesByTable.ContainsKey(change.tableSpec.name)) throw new CriticalException("Table not supported"); this.changesByTable[change.tableSpec.name].Add(change); this.isAdding = false; foreach(AbstractChange referencedChange in change.references) { this.Add(referencedChange); } }
public TwoWayReferenceFieldValue(AbstractChange referenced, Calculator calculator) : base(referenced) { this.calculator = calculator; }
public ReferenceFieldValue(AbstractChange referenced) { this.referenced = referenced; }
private void ApplyToChange(Transaction transaction, AbstractChange change) { foreach(AbstractChange referenced in change.references) { if(!referenced.getId().HasValue) { this.ApplyToChange(transaction, referenced); } } change.Apply(transaction); }