public void TruncateOrDelete <TEntity>(DeleteFromOptions deleteFromOptions = DeleteFromOptions.None)
     where TEntity : class =>
 Task.Run(async() =>
 {
     await TruncateHandler.TruncateAsync(Model.GetEntityType <TEntity>(), deleteFromOptions)
     .ConfigureAwait(false);
 }).GetAwaiter().GetResult();
Esempio n. 2
0
        protected async Task InternalTruncateAsync(IEntityType entityType, DeleteFromOptions options, CancellationToken cancellationToken)
        {
            var fkeys = entityType.GetReferencingForeignKeys().ToList();

            if (fkeys.Any())
            {
                if (options.HasFlag(DeleteFromOptions.TruncateDependent))
                {
                    foreach (var fkey in fkeys.Where(x => x.DeleteBehavior == DeleteBehavior.Cascade))
                    {
                        var dependentEntityType = fkey.DeclaringEntityType;
                        await InternalTruncateAsync(dependentEntityType, options, cancellationToken).ConfigureAwait(false);
                    }
                }
                await ExecuteDeleteAsync(entityType, cancellationToken).ConfigureAwait(false);
            }
            else
            {
                await ExecuteTruncateAsync(entityType, cancellationToken).ConfigureAwait(false);
            }
        }
Esempio n. 3
0
        public async Task TruncateAsync(IEntityType entityType, DeleteFromOptions options = DeleteFromOptions.None,
                                        CancellationToken cancellationToken = default)
        {
            if (entityType is null)
            {
                throw new ArgumentNullException(nameof(entityType));
            }

            var transaction = _dbContext.Database.CurrentTransaction == null &&
                              options.HasFlag(DeleteFromOptions.UseTransaction)
                ? await _dbContext.Database.BeginTransactionAsync(cancellationToken).ConfigureAwait(false)
                : null;

            try
            {
                await InternalTruncateAsync(entityType, options, cancellationToken).ConfigureAwait(false);

                transaction?.Commit();
            }
            finally
            {
                transaction?.Dispose();
            }
        }
 public async Task TruncateOrDeleteAsync <TEntity>(DeleteFromOptions deleteFromOptions = DeleteFromOptions.None,
                                                   CancellationToken cancellationToken = default)
     where TEntity : class =>
 await TruncateHandler.TruncateAsync(Model.GetEntityType <TEntity>(), deleteFromOptions, cancellationToken)
 .ConfigureAwait(false);