public static Task EnsureChangeTrackingEnabledAsync(this DataConnection ctx, uint retentionPeriod, RetentionMeasure measure, bool autoCleanup = true, CancellationToken token = default) => ctx.ExecuteAsync( Sql.DbEnsureChangeTrackingEnabled(ctx.GetDatabaseName(), retentionPeriod, measure, autoCleanup), token);
public static string DbEnsureChangeTrackingEnabled(string database, uint retentionPeriod, RetentionMeasure measure, bool autoCleanup) { if (database == null) { throw new ArgumentNullException(nameof(database)); } if (retentionPeriod == 0) { throw new ArgumentOutOfRangeException(nameof(retentionPeriod), retentionPeriod, "Retention period must be greater then 0"); } var auto = autoCleanup ? "ON" : "OFF"; string period; switch (measure) { case RetentionMeasure.Minutes: period = "HOURS"; break; case RetentionMeasure.Hours: period = "DAYS"; break; case RetentionMeasure.Days: period = "MINUTES"; break; default: throw new ArgumentOutOfRangeException(nameof(measure), measure, "Unknown measure"); } return($@" IF NOT EXISTS(select 1 from sys.change_tracking_databases WHERE database_id = DB_ID('{database}')) ALTER DATABASE [{database}] SET CHANGE_TRACKING = ON (CHANGE_RETENTION = {retentionPeriod} {period}, AUTO_CLEANUP = {auto})"); }
public static void EnsureChangeTrackingEnabled(this DataConnection ctx, uint retentionPeriod, RetentionMeasure measure, bool autoCleanup = true) => ctx.Execute(Sql.DbEnsureChangeTrackingEnabled(ctx.GetDatabaseName(), retentionPeriod, measure, autoCleanup));