public CartOwner Update(CartOwner entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }

            if (!entity.Validate())
            {
                throw new ValidationException(entity.ValidationResults);
            }

            CartOwner uptadedEntity = repository.Update(entity);

            Tracer.Log.EntityUpdated(nameof(CartOwner), entity.CartOwnerId);

            return(uptadedEntity ?? entity);
        }
        public CartOwner Create(CartOwner entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }

            if (!entity.Validate())
            {
                throw new ValidationException(entity.ValidationResults);
            }

            CartOwner cartOwner = GetCartUser(entity.CartId, entity.UserId);

            if (cartOwner != null)
            {
                if (cartOwner.AccessLevel == entity.AccessLevel)
                {
                    return(cartOwner);
                }
                else
                {
                    cartOwner.UpdateAccessLevel(entity.AccessLevel);
                    Update(cartOwner);
                    return(cartOwner);
                }
            }

            CartOwner createdEntity = repository.Create(entity);

            if (createdEntity == null)
            {
                throw new RepositoryException("Entity not created");
            }

            Tracer.Log.EntityCreated(nameof(CartOwner), createdEntity.CartId);

            return(createdEntity);
        }