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