public string CreateDeliveryTypeQuery(UpdateParameters parameters, DbContext context
            , string prefix = null)
        {
            string tvpName = prefix + CoreTVP.UPDATE_USER_TYPE;
            var merge = new MergeOperation<UserDeliveryTypeSettings<Guid>>(context, null, tvpName, CoreTVP.UPDATE_USERS_PARAMETER_NAME);
            
            merge.Compare.IncludeProperty(p => p.UserID)
                .IncludeProperty(p => p.DeliveryType);

            merge.Update.ExcludeAllPropertiesByDefault = true;

            if (parameters.UpdateDeliveryTypeSendCount)
            {
                merge.Update.Assign(t => t.SendCount, (t, s) => t.SendCount + s.SendCount);
            }

            if (parameters.UpdateDeliveryTypeLastSendDateUtc)
            {
                merge.Update.Assign(t => t.LastSendDateUtc, (t, s) => DateTime.UtcNow);
            }

            return merge.ConstructCommand(MergeType.Update);
        }
        public string CreateTopicQuery(UpdateParameters parameters, DbContext context
            , string prefix = null)
        {
            string tvpName = prefix + CoreTVP.UPDATE_USER_TYPE;
            var merge = new MergeOperation<UserTopicSettings<Guid>>(context, null, tvpName, CoreTVP.UPDATE_USERS_PARAMETER_NAME);

            merge.Compare.IncludeProperty(p => p.UserID)
                .IncludeProperty(p => p.CategoryID)
                .IncludeProperty(p => p.TopicID);

            merge.Update.ExcludeAllPropertiesByDefault = true;

            if (parameters.UpdateTopicSendCount)
            {
                merge.Update.Assign(t => t.SendCount, (t, s) => t.SendCount + s.SendCount);
            }

            if (parameters.UpdateTopicLastSendDateUtc)
            {
                merge.Update.Assign(t => t.LastSendDateUtc, (t, s) => DateTime.UtcNow);
            }

            if (parameters.CreateTopicIfNotExist)
            {
                merge.Insert.IncludeDefault(t => t.AddDateUtc, DateTime.UtcNow)
                    .IncludeDefault(t => t.IsEnabled, true)
                    .IncludeDefault(t => t.LastSendDateUtc, DateTime.UtcNow)
                    .IncludeDefault(t => t.IsDeleted, false);
            }

            MergeType mergeType = parameters.CreateTopicIfNotExist
                ? MergeType.Upsert
                : MergeType.Update;
            return merge.ConstructCommand(mergeType);
        }