<< Click to Display Table of Contents >> Объектная модель > Действия с репозиториями и сущностями > Create, Copy, Delete – cоздание, удаление, изменение сущности Reload – перезагрузка свойств сущности
|
![]() ![]() ![]() |
Метод используется для перезагрузки свойств сущности из базы данных. Он получает актуальное состояние сущности, и позволяет в некоторых случаях избежать ошибок рассинхронизации данных при одновременном изменении сущности в разных запросах или асинхронных обработчиках.
Особенности работы метода:
•при его вызове обновляются значения свойств сущности, права доступа, вложения задач, заданий и уведомлений;
•перед получением актуальных данных из БД все локальные изменения сбрасываются;
•если метод вызывается для сущности, которая не записана в БД, ничего не происходит;
•если сущность была удалена, при использовании метода генерируется исключение ReloadNotFoundEntityException;
•метод нельзя вызывать для записей свойства-коллекции. Дочерние свойства перезагружаются вместе с сущностью, к которой принадлежит свойство-коллекция.
Синтаксис
C# |
public virtual void Reload(); |
Пример
В фоновом процессе при обработке списка сотрудников необходимо поставить блокировку на каждую сущность перед тем, как вносить изменения. После блокировки сущностей получите их актуальное состояние из БД на случай, если какой-либо процесс успел поменять подразделение работника. Блокировка на сущность гарантирует, что после перезагрузки она останется актуальной до разблокировки:
public virtual void UpdateEmployees()
{
var outdatedDepartment = GetOutdatedDepartment();
var actualDepartment = GetActualDepartment();
var employees = Sungero.Company.Employees.GetAll()
.Where(x => x.Department == outdatedDepartment)
.ToList();
foreach (var employee in employees)
{
try
{
// Заблокировать сущность.
isForcedLocked = Locks.TryLock(employee);
// Если получилось установить блокировку, перезагрузить сущность.
if (isForcedLocked)
{
// Получить актуальные значения свойств для случая, если какой-либо процесс
// успел поменять подразделение работника.
employee.Reload();
if (employee.Department == outdatedDepartment)
{
employee.Department = actualDepartment;
employee.Save();
}
}
}
finally
{
// Если сущность была заблокирована, снять блокировку.
if (isForcedLocked)
{
Locks.Unlock(employee);
}
}
}
}
© Компания Directum, 2025 |