Доброго времени суток. Стоит задача смены ответственных в разделе при определенных условиях, записей в разделе более 200 тыс. Необходимо для оптимизации менять значения в пачках по 1000 записей. Подскажите варианты решения данной задачи.
Нравится
Добрый день!
Если не нужно при этом генерировать сигналы объектов, то посоветую реализовать все в хранимой процедуре. Там уже реализовать цикл. Тем самым вы добьетесь максимальной производительности. А процедуру вызывать в скрипте C#.
Добрый день!
Если не нужно при этом генерировать сигналы объектов, то посоветую реализовать все в хранимой процедуре. Там уже реализовать цикл. Тем самым вы добьетесь максимальной производительности. А процедуру вызывать в скрипте C#.
Если доступа к серверу нет, то можно и без хранимок, используя в C#-скрипте БП классы Select и Update. С ними тоже сигналы не генерируются. А если нужно, чтобы по каждой записи отрабатывала логика встроенных и отдельных БП на изменение ответственного, то только с использованием класса EntitySchemaQuery.
Пробовал реализовать через esq:
var isOwnerInChange = true;
while (isOwnerInChange) {
var subQuery = new EntitySchemaQuery(_uc.EntitySchemaManager,"UsrChangeOwnerHelperLog");
subQuery.AddColumn("UsrEntityId");
var entitySchemaManager = _uc.EntitySchemaManager;
var esq = new EntitySchemaQuery(entitySchemaManager, "Название схемы");
esq.UseAdminRights = false;
esq.AddAllSchemaColumns();
// какие то фильтры
var mainFilter = new EntitySchemaQueryFilter(FilterComparisonType.NotExists);
mainFilter.LeftExpression = esq.CreateSchemaColumnExpression("Id");
mainFilter.RightExpressions.Add(new EntitySchemaQueryExpression(subQuery));
esq.Filters.Add(mainFilter);
esq.RowCount=1000;
var entities = esq.GetEntityCollection(_uc);
if (entities.Count > 0)
{
foreach (Entity entity in entities)
{
var entityId = entity.GetTypedColumnValue<Guid>("Id");
var newOwnerId = SearchOwner(accountId, "Account");
//Какая то логика
}
} else {
isOwnerInChange = false;
}
}