コード例 #1
0
 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);
コード例 #2
0
ファイル: Sql.cs プロジェクト: ijsgaus/linq2db-changetracking
        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})");
        }
コード例 #3
0
 public static void EnsureChangeTrackingEnabled(this DataConnection ctx, uint retentionPeriod, RetentionMeasure measure,
                                                bool autoCleanup = true)
 => ctx.Execute(Sql.DbEnsureChangeTrackingEnabled(ctx.GetDatabaseName(), retentionPeriod, measure, autoCleanup));