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); }