public void TryDeleteAllTestData()
        {
            /*
             * Delete in following order:
             * ==========================
             * 1. Delete Contact.RelationAddress
             * 2. Delete Contact.RelationDocument
             * 3. Delete Contact.Relation
             * 4. Delete Contact.[Address]
             * 5. Delete Contact.Document
             * 6. Delete Contact.Country
             */



            foreach (string id in ContactTestFixtureData.Keys.RelationAddress.Values)
            {
                Result item = ContactAgentFactory
                              .CreateContactAgent()
                              .DeleteRelationAddressItem(id);
                ErrorStringDelete(item, "RelationAddressItem", id);
            }

            foreach (string id in ContactTestFixtureData.Keys.RelationDocument.Values)
            {
                Result item = agent.DeleteRelationDocumentItem(id);
                ErrorStringDelete(item, "RelationDocumentItem", id);
            }

            foreach (string id in ContactTestFixtureData.Keys.Relation.Values)
            {
                Result item = agent.DeleteRelationItem(id);
                ErrorStringDelete(item, "RelationItem", id);
            }

            foreach (string id in ContactTestFixtureData.Keys.Address.Values)
            {
                Result item = agent.DeleteAddressItem(id);
                ErrorStringDelete(item, "AddressItem", id);
            }

            foreach (string id in ContactTestFixtureData.Keys.Document.Values)
            {
                Result item = agent.DeleteDocumentItem(id);
                ErrorStringDelete(item, "DocumentItem", id);
            }

            foreach (string id in ContactTestFixtureData.Keys.Country.Values)
            {
                Result item = agent.DeleteCountryItem(id);
                ErrorStringDelete(item, "CountryItem", id);
            }
        }
        public void TryTransactionScope()
        {
            int count;

            TryDeleteAllTestData();

            var countryItems = GetCountryItems();

            var documentItems = new List <DocumentItem>
            {
                GetDocumentItem(ContactTestFixtureData.Keys.Document[1]),
                GetDocumentItem(ContactTestFixtureData.Keys.Document[2]),
                GetDocumentItem(ContactTestFixtureData.Keys.Document[3])
            };

            var addressItems = new List <AddressItem>
            {
                GetAddressItem(ContactTestFixtureData.Keys.Address[1]),
                GetAddressItem(ContactTestFixtureData.Keys.Address[2]),
                new AddressItem()
            };

            try
            {
                var countryItemsSaved = new List <CountryItem>(countryItems.Count);

                count = countryItems.Count;
                for (var i = 0; i < count; i++)
                {
                    CountryItem countryItemSaved = ContactAgentFactory
                                                   .CreateCountryAgent()
                                                   .SaveCountryItem(countryItems[i]);
                    Debug.WriteLineIf(countryItemSaved.HasErrors, "Error saving countryitem " + (i + 1) + " / " + count + "\n\t" + countryItemSaved.Errors);
                    countryItemsSaved.Add(countryItemSaved);
                }

                using (var scope = new TransactionScope())
                {
                    var addressItemsSaved  = new List <AddressItem>(addressItems.Count);
                    var documentItemsSaved = new List <DocumentItem>(documentItems.Count);

                    count = documentItems.Count;
                    for (var i = 0; i < count; i++)
                    {
                        DocumentItem documentItemSaved = ContactAgentFactory
                                                         .CreateDocumentAgent()
                                                         .SaveDocumentItem(documentItems[i]);
                        documentItemsSaved.Add(documentItemSaved);
                    }

                    count = addressItems.Count;
                    for (var i = 0; i < count; i++)
                    {
                        AddressItem addressItemSaved = ContactAgentFactory
                                                       .CreateAddressAgent()
                                                       .SaveAddressItem(addressItems[i]);
                        Debug.WriteLineIf(addressItemSaved.HasErrors, "Error saving AddressItem " + (i + 1) + " / " + count + "\n\tError = " + GetErrorString(addressItemSaved.Errors));
                        addressItemsSaved.Add(addressItemSaved);
                    }

                    bool succes = !(from i in documentItemsSaved where i.HasErrors select i).Any() & !(from i in addressItemsSaved where i.HasErrors select i).Any();

                    if (succes)
                    {
                        scope.Complete();
                        Debug.WriteLine("OK");
                    }
                    else
                    {
                        throw new ApplicationException(GetErrorString(addressItemsSaved.ToArray()) + GetErrorString(documentItemsSaved.ToArray()));
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Error(s) occured.\n" + ex.Message);
            }
        }
        public void TryGetRelationAddresses()
        {
            IContactAgent agent = ContactAgentFactory.CreateContactAgent();

            List <DocumentItem>         documentItemsSaved;
            List <AddressItem>          addressItemsSaved;
            RelationItem                relationItemSaved;
            List <RelationAddressItem>  relationAddressItemsSaved;
            List <RelationDocumentItem> relationDocumentItemsSaved;
            List <CountryItem>          countryItemsSaved;

            AddressItem[] addressItems;
            int           count = 0;

            try
            {
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
                {
                    Debug.WriteLine("Creating all objects on " + DateTime.Now);
                    List <AddressItem>          addressItemsNew          = GetAddressItems(2);
                    List <CountryItem>          countryItemsNew          = GetCountryItems(2);
                    List <DocumentItem>         documentItemsNew         = GetDocumentItems(2);
                    RelationItem                relationItemNew          = GetRelationItem();
                    List <RelationAddressItem>  relationAddressItemsNew  = GetRelationAddressItems(2);
                    List <RelationDocumentItem> relationDocumentItemsNew = GetRelationDocumentItems(2);

                    Debug.WriteLine("All objects in memory on {0}", DateTime.Now);

                    Debug.WriteLine("Saving all objects");

                    count             = countryItemsNew.Count;
                    countryItemsSaved = new List <CountryItem>(count);
                    Debug.WriteLine("Saving countries objects");
                    for (int i = 0; i < count; i++)
                    {
                        CountryItem countryItemSaved = agent.SaveCountryItem(countryItemsNew[i]);
                        Debug.WriteLine("CountryItem {0} / {1} saved {2}on {3}", (i + 1), count, (countryItemSaved.HasErrors ? "with errors " : ""), DateTime.Now);
                        countryItemsSaved.Add(countryItemSaved);
                    }

                    count = documentItemsNew.Count;
                    documentItemsSaved = new List <DocumentItem>(count);
                    Debug.WriteLine("Saving documents objects");
                    for (int i = 0; i < count; i++)
                    {
                        DocumentItem documentItemSaved = agent.SaveDocumentItem(documentItemsNew[i]);
                        Debug.WriteLine("DocumentItem {0} / {1} saved {2}on {3}", (i + 1), count, (documentItemSaved.HasErrors ? "with errors " : ""), DateTime.Now);
                        documentItemsSaved.Add(documentItemSaved);
                    }

                    relationItemSaved = agent.SaveRelationItem(relationItemNew);
                    Debug.WriteLine("AddressItem saved {0}on {1}", (relationItemSaved.HasErrors ? "with errors " : ""), DateTime.Now);

                    count             = addressItemsNew.Count;
                    addressItemsSaved = new List <AddressItem>(count);
                    Debug.WriteLine("Saving addresses objects");
                    for (int i = 0; i < count; i++)
                    {
                        AddressItem addressItemSaved = agent.SaveAddressItem(addressItemsNew[i]);
                        Debug.WriteLine("CountryItem {0} / {1} saved {2}on {3}", (i + 1), count, (addressItemSaved.HasErrors ? "with errors " : ""), DateTime.Now);
                        addressItemsSaved.Add(addressItemSaved);
                    }

                    count = relationAddressItemsNew.Count;
                    relationAddressItemsSaved = new List <RelationAddressItem>(count);
                    Debug.WriteLine("Saving RelationAddress objects");
                    for (int i = 0; i < count; i++)
                    {
                        RelationAddressItem relationAddressItemSaved = agent.SaveRelationAddressItem(relationAddressItemsNew[i]);
                        Debug.WriteLine("RelationAddressItem {0} / {1} saved {2}on {3}", (i + 1), count, (relationAddressItemSaved.HasErrors ? "with errors " : ""), DateTime.Now);
                        relationAddressItemsSaved.Add(relationAddressItemSaved);
                    }

                    count = relationDocumentItemsNew.Count;
                    relationDocumentItemsSaved = new List <RelationDocumentItem>(count);
                    Debug.WriteLine("Saving RelationDocument objects");
                    for (int i = 0; i < count; i++)
                    {
                        RelationDocumentItem relationDocumentItemSaved = agent.SaveRelationDocumentItem(relationDocumentItemsNew[i]);
                        Debug.WriteLine("RelationDocumentItem {0} / {1} saved {2}on {3}", (i + 1), count, (relationDocumentItemSaved.HasErrors ? "with errors " : ""), DateTime.Now);
                        relationDocumentItemsSaved.Add(relationDocumentItemSaved);
                    }

                    Debug.WriteLine("All objects saved");

                    Debug.WriteLine("Before commiting transaction");
                    scope.Complete();
                    Debug.WriteLine("Commit transaction completed");
                }
                addressItems = agent.GetAddressItemsForRelation(ContactTestFixtureData.Keys.Relation[1]);
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error(s) occured\n" + e.Message);
            }
        }