public void CircularReferenceBreaker_Test() { XmlConfigurator.Configure(); var breaker = new CircularReferenceBreaker(); Assert.IsFalse(breaker.IsVisited<object, object, object>(this.TestMethod)); breaker.Push<object, object, object>(this.TestMethod); Assert.IsTrue(breaker.IsVisited<object, object, object>(this.TestMethod)); breaker.Push<object, object, object>(this.TestMethod); Assert.IsTrue(breaker.IsVisited<object, object, object>(this.TestMethod)); breaker.Pop(); Assert.IsTrue(breaker.IsVisited<object, object, object>(this.TestMethod)); breaker.Pop(); Assert.IsFalse(breaker.IsVisited<object, object, object>(this.TestMethod)); }
public override void Write(CircularReferenceBreaker breaker, IWritePrimitives writer, Counter order, AbstractRepositoryOperation[] orderedOperations) { InsertRecord.Logger.Debug("Entering Write:" + this); InsertRecord.Logger.Debug($"breaker: {breaker}"); if (breaker.IsVisited<IWritePrimitives, Counter, AbstractRepositoryOperation[]>(this.Write)) { InsertRecord.Logger.Debug("Write already visited. Exiting"); return; } if (this.IsWriteDone) { InsertRecord.Logger.Debug("Write already done. Exiting"); return; } breaker.Push<IWritePrimitives, Counter, AbstractRepositoryOperation[]>(this.Write); this.primaryKeyOperations = this.service.GetPrimaryKeyOperations(this.Peers).ToList(); this.service.WritePrimaryKeyOperations(writer, this.primaryKeyOperations, breaker, order, orderedOperations); Columns columnData = this.GetColumnData(writer); this.Order = order.Value++; InsertRecord.Logger.Debug($"this.Order: {this.Order}"); orderedOperations[this.Order] = this; TableName tableName = Helper.GetTableName(this.RecordReference.RecordType, this.attributeDecorator); this.service.WritePrimitives(writer, tableName.CatalogueName, tableName.Schema, tableName.Name, columnData.AllColumns, this.primaryKeyValues); this.service.CopyPrimaryToForeignKeyColumns(columnData.ForeignKeyColumns); this.IsWriteDone = true; breaker.Pop(); InsertRecord.Logger.Debug("Exiting Write"); }