protected override void Generate(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder)
        {
            Action generateAction = operation switch
            {
                EnableChangeTrackingForDatabaseOperation op => () => Generate(op, model, builder),
                DisableChangeTrackingForDatabaseOperation op => () => Generate(op, model, builder),
                EnableChangeTrackingForTableOperation op => () => Generate(op, model, builder),
                DisableChangeTrackingForTableOperation op => () => Generate(op, model, builder),
                _ => () => base.Generate(operation, model, builder)
            };

            generateAction();
        }
    }
        void Generate(EnableChangeTrackingForTableOperation operation, IModel model, MigrationCommandListBuilder builder)
        {
            //TODO detect if operation.TrackColumns has changed and re-create?

            var tableName = operation.Schema == null ? operation.Name : $"{operation.Schema}.{operation.Name}";

            var sqlHelper = Dependencies.SqlGenerationHelper;

            builder
            .Append("ALTER TABLE ")
            .Append(sqlHelper.DelimitIdentifier(tableName))
            .Append(" ENABLE CHANGE_TRACKING");

            if (operation.TrackColumns)
            {
                builder.Append(" WITH (TRACK_COLUMNS_UPDATED = ON)");
            }

            builder.AppendLine(sqlHelper.StatementTerminator)
            .EndCommand();
        }