protected void AddToSyncList <TEntity>() where TEntity : class
        {
            var model    = new SyncModel <TEntity>();
            var typeName = typeof(TEntity).Name;

            var syncColumn = typeof(TEntity).GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(SyncColumnAttribute)));

            if (syncColumn.Count() != 1)
            {
                throw new Exception("Type " + typeName + " must have one and only one property marked as SyncColumn");
            }

            var syncColumnName = syncColumn.First().Name;

            var deleteColumn = typeof(TEntity).GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(DeleteColumnAttribute)));

            var deleteColumnName = deleteColumn?.FirstOrDefault()?.Name;

            if (deleteColumnName != null)
            {
                model.DeleteColumnName = deleteColumnName;
            }

            model.SyncColumnName = syncColumnName;

            model.SyncNeeded = ExpressionHelper.CheckItemInequality <TEntity>(syncColumnName, completeStatusValue);

            model.UpsertModel = EntityHelper <TEntity> .GetUpsertModel(this);

            model.UpsertModel.SyncColumn = syncColumnName;


            model.Log = (string msg) => Log?.Invoke(msg);

            models.Add(model);
        }