public async Task CreateContact(ContactDomainObj contactDomainObj)
        {
            await DoDatabaseValidation(contactDomainObj);

            var strategy = DbContext.Database.CreateExecutionStrategy();
            await strategy.ExecuteAsync(async() =>
            {
                using (var transaction = DbContext.Database.BeginTransaction())
                {
                    var bizEntity = new BusinessEntity {
                    };
                    DbContext.BusinessEntity.Add(bizEntity);
                    await Save();

                    contactDomainObj.BusinessEntityID = bizEntity.BusinessEntityID;
                    var contact = new AdventureWorks.Models.Person.Person {
                    };
                    contact.Map(contactDomainObj);

                    contact.EmailAddressObj = new EmailAddress
                    {
                        BusinessEntityID   = bizEntity.BusinessEntityID,
                        PersonEmailAddress = contactDomainObj.EmailAddress
                    };

                    contact.PasswordObj = new PersonPWord
                    {
                        PasswordHash = contactDomainObj.EmailPasswordHash,
                        PasswordSalt = contactDomainObj.EmailPasswordSalt
                    };

                    DbContext.Person.Add(contact);
                    await Save();

                    var bec = new BusinessEntityContact
                    {
                        BusinessEntityID = contactDomainObj.ParentEntityID,
                        PersonID         = contact.BusinessEntityID,
                        ContactTypeID    = contactDomainObj.ContactTypeID
                    };
                    DbContext.BusinessEntityContact.Add(bec);
                    await Save();
                    transaction.Commit();
                }
            });
        }
        public async Task CreateEmployee(EmployeeDomainObj employeeDomainObj)
        {
            var strategy = DbContext.Database.CreateExecutionStrategy();
            await strategy.ExecuteAsync(async() =>
            {
                using (var transaction = DbContext.Database.BeginTransaction())
                {
                    var bizEntity = new BusinessEntity {
                    };
                    DbContext.BusinessEntity.Add(bizEntity);
                    await Save();

                    employeeDomainObj.BusinessEntityID = bizEntity.BusinessEntityID;

                    var person = new AdventureWorks.Models.Person.Person {
                    };
                    person.BusinessEntityID = bizEntity.BusinessEntityID;
                    person.Map(employeeDomainObj);
                    person.EmailAddressObj = new EmailAddress
                    {
                        BusinessEntityID   = bizEntity.BusinessEntityID,
                        PersonEmailAddress = employeeDomainObj.EmailAddress
                    };
                    person.PasswordObj = new PersonPWord
                    {
                        BusinessEntityID = bizEntity.BusinessEntityID,
                        PasswordHash     = employeeDomainObj.PasswordHash,
                        PasswordSalt     = employeeDomainObj.PasswordSalt
                    };

                    var employee = new Employee {
                    };
                    employee.Map(employeeDomainObj);
                    employee.BusinessEntityID = bizEntity.BusinessEntityID;

                    person.EmployeeObj = employee;
                    DbContext.Person.Add(person);
                    await Save();

                    transaction.Commit();
                }
            });
        }