public virtual void Test_AddDirtyChildrenToTransactionCommitter_AddedChild() { //---------------Set up test pack------------------- OrganisationTestBO organisationTestBO = OrganisationTestBO.CreateSavedOrganisation(); MultipleRelationship <ContactPersonTestBO> relationship = organisationTestBO.Relationships.GetMultiple <ContactPersonTestBO>("ContactPeople"); RelationshipDef relationshipDef = (RelationshipDef)relationship.RelationshipDef; relationshipDef.RelationshipType = RelationshipType.Association; ContactPersonTestBO contactPerson = ContactPersonTestBO.CreateSavedContactPerson(); relationship.BusinessObjectCollection.Add(contactPerson); SingleRelationship <OrganisationTestBO> reverseRelationship = contactPerson.Relationships.GetSingle <OrganisationTestBO>("Organisation"); TransactionCommitter tc = (TransactionCommitter)BORegistry.DataAccessor.CreateTransactionCommitter(); //---------------Assert PreConditions--------------- Assert.AreEqual(0, tc.OriginalTransactions.Count); Assert.IsNotNull(reverseRelationship); //---------------Execute Test ---------------------- relationship.AddDirtyChildrenToTransactionCommitter(tc); //---------------Test Result ----------------------- Assert.AreEqual(1, tc.OriginalTransactions.Count); Assert.IsInstanceOf(typeof(TransactionalSingleRelationship_Added), tc.OriginalTransactions[0]); Assert.AreSame(relationship, ((TransactionalSingleRelationship_Added)tc.OriginalTransactions[0]).Relationship); }
public void Test_NewParentWithClassTableInheritance_NewChild() { //---------------Set up test pack------------------- ClassDef.ClassDefs.Clear(); ClassDef.ClassDefs.Add(new XmlClassDefsLoader(BOBroker.GetClassDefsXml(), new DtdLoader(), new DefClassFactory()).LoadClassDefs()); Habanero.Test.Structure.Person person = new Person(); person.LastName = "bob"; Vehicle vehicle = new Vehicle(); vehicle.DateAssembled = DateTime.Now; person.VehiclesOwned.Add(vehicle); //---------------Assert Precondition---------------- //---------------Execute Test ---------------------- TransactionCommitter committer = (TransactionCommitter)BORegistry.DataAccessor.CreateTransactionCommitter(); committer.AddBusinessObject(person); committer.CommitTransaction(); //---------------Test Result ----------------------- Assert.AreEqual(2, committer.OriginalTransactions.Count, "There should only be two transactions: one insert for the person and one insert for the vehicle"); }
/// <summary> /// Deletes the Child Bo identified by <paramref name="bo"/> /// </summary> /// <param name="committer"></param> /// <param name="bo"></param> protected virtual void DeleteChild(TransactionCommitter committer, IBusinessObject bo) { if (bo == null) return; if (!bo.Status.IsDeleted) { bo.MarkForDelete(); } // if (bo.Status.IsNew) return; committer.ExecuteTransactionToDataSource(committer.CreateTransactionalBusinessObject(bo)); }
/// <summary> /// DereferenceThe Child <see cref="IBusinessObject"/> identified by <paramref name="bo"/> /// </summary> /// <param name="committer">The transaction commtter responsible for persisting this dereference.</param> /// <param name="bo">The Business Object being dereferenced.</param> protected void DereferenceChild(TransactionCommitter committer, IBusinessObject bo) { foreach (RelPropDef relPropDef in RelationshipDef.RelKeyDef) { bo.SetPropertyValue(relPropDef.RelatedClassPropName, null); } if (bo.Status.IsNew) return; committer.ExecuteTransactionToDataSource(committer.CreateTransactionalBusinessObject(bo)); }
/// <summary> /// Adds all the marked for deleted children to the transaction committer and commits it. /// </summary> /// <param name="committer"></param> internal abstract void DeleteMarkedForDeleteChildren(TransactionCommitter committer);
/// <summary> /// Dereferences the Removed Children and adds the dereference transactionItem to the transaction committer /// </summary> /// <param name="committer"></param> internal abstract void DereferenceRemovedChildren(TransactionCommitter committer);
/// <summary> /// Adds all dirty children to the <see cref="TransactionCommitter"/> /// </summary> /// <param name="committer"></param> internal abstract void AddDirtyChildrenToTransactionCommitter(TransactionCommitter committer);