protected override async Task OnUpdateAsync(IContact contact, ContactSupplementModel contactSupplementModel)
        {
            NullGuard.NotNull(contact, nameof(contact))
            .NotNull(contactSupplementModel, nameof(contactSupplementModel));

            contactSupplementModel.Birthday = contact.Birthday;
            contactSupplementModel.ContactGroupIdentifier = contact.ContactGroup.Number;
            contactSupplementModel.ContactGroup           = await DbContext.ContactGroups.SingleAsync(contactGroupModel => contactGroupModel.ContactGroupIdentifier == contact.ContactGroup.Number);

            contactSupplementModel.Acquaintance          = contact.Acquaintance;
            contactSupplementModel.PersonalHomePage      = contact.PersonalHomePage;
            contactSupplementModel.LendingLimit          = contact.LendingLimit;
            contactSupplementModel.PaymentTermIdentifier = contact.PaymentTerm.Number;
            contactSupplementModel.PaymentTerm           = await DbContext.PaymentTerms.SingleAsync(paymentTermModel => paymentTermModel.PaymentTermIdentifier == contact.PaymentTerm.Number);

            string[] externalIdentifierCollection = _contactSupplementBindingModelHandler.GetExternalIdentifierCollection(contact);
            foreach (ContactSupplementBindingModel contactSupplementBindingModel in contactSupplementModel.ContactSupplementBindings.Where(m => externalIdentifierCollection.Any(externalIdentifier => externalIdentifier == m.ExternalIdentifier) == false).ToArray())
            {
                contactSupplementModel.ContactSupplementBindings.Remove(contactSupplementBindingModel);
            }
            foreach (string externalIdentifier in externalIdentifierCollection.Where(m => contactSupplementModel.ContactSupplementBindings.Any(contactSupplementBindingModel => contactSupplementBindingModel.ExternalIdentifier == m) == false))
            {
                ContactSupplementBindingModel contactSupplementBindingModel = new ContactSupplementBindingModel
                {
                    ContactSupplementIdentifier = contactSupplementModel.ContactSupplementIdentifier,
                    ContactSupplement           = contactSupplementModel,
                    ExternalIdentifier          = externalIdentifier
                };
                contactSupplementModel.ContactSupplementBindings.Add(contactSupplementBindingModel);
            }
        }
        protected override Task <ContactSupplementModel> OnDeleteAsync(ContactSupplementModel contactSupplementModel)
        {
            NullGuard.NotNull(contactSupplementModel, nameof(contactSupplementModel));

            ContactSupplementBindingModel contactSupplementBindingModel = contactSupplementModel.ContactSupplementBindings.FirstOrDefault();

            while (contactSupplementBindingModel != null)
            {
                contactSupplementModel.ContactSupplementBindings.Remove(contactSupplementBindingModel);
                contactSupplementBindingModel = contactSupplementModel.ContactSupplementBindings.FirstOrDefault();
            }

            return(Task.FromResult(contactSupplementModel));
        }