Есть ли лучший способ удалить самые данные в базе данных, как 160 КБ данных с Nhibernate - PullRequest
0 голосов
/ 15 октября 2019

У меня есть 120 КБ данных в таблице с использованием mssql, и мне нужно удалить все, чтобы сохранить снова, но это очень медленно.

У меня есть объект с именем InventarioEstoque, и у меня есть два дочерних объекта InventariosEstoquesSaldosи InventariosEstoquesSaldosTerceiros, я пытался удалить 100 из 100 и зафиксировать в базе данных, но для каждых 100 данных это заняло более одной минуты, я смотрел на консоль, может быть, потому что это генерирующий запрос N + 1 для детейпри поиске каскадного удаления.

последний код, который я пробовал:

var itensDelete = UnitOfWork.InventariosEstoques.All().Where(x => dates.Contains(x.Data.Date) && x.OrigemInventario == OrigemInventarioEstoque.FechamentoEstoque).Select(x => x.Id);

                    while (itensDelete.Any())
                    {
                        var idsDelete = itensDelete.Take(100).ToList();
                        UnitOfWork.InventariosEstoques.Delete(x => idsDelete.Contains(x.Id));
                        UnitOfWork.SaveChanges();
                    }

есть ли способ быстрее удалить эти данные с помощью Nhibernate?

1 Ответ

0 голосов
/ 16 октября 2019

Добавьте оператор using NHibernate.Linq вверху и используйте DmlExtensionMethods.Delete метод расширения:

var itensDelete = UnitOfWork.InventariosEstoques.All()
    .Where(x => dates.Contains(x.Data.Date) && x.OrigemInventario == OrigemInventarioEstoque.FechamentoEstoque)
    .Delete();

UnitOfWork.SaveChanges();
...