Общие сведения
Надёжность и безопасность
Покупка лицензии
Начало работы
Роли в системе
Проекты
Концепции
Компоненты
Инструкции
Задачи
Финансы
Ресурсы
Таймшиты
Клиенты
Вики
Затраты
Отчёты и аналитика
FAQ
Типы отчётов
Использование отчётов
Группировка данных источника
Группировка данных в отчёте
Типы виджетов
Общие отчёты и шаблоны
Настройка отчёта
Экспорт отчётов
Пользовательские настройки отчёта
Вычисляемые поля
Выражения вычисляемых полей
Особые колонки отчётов с временными рядами
Использование панелей мониторинга
Публикация панелей
Фильтры источников данных
Настройка и администрирование
Типовой порядок настройки системы
On-premises
API
История изменений
Термины и определения

IContextEntityService<TEntity>

Обновлено: 13.03.2026

IContextEntityService<TEntity> — сервис работы с сущностями в контексте текущей операции.

Сервис используется внутри динамического кода (например, в CustomHooks, ScheduledJob и LifecycleRoleResolver) и предоставляет безопасный доступ к операциям над сущностями.

Все операции выполняются:

  • в рамках текущего DbContext;
  • в рамках текущей транзакции;
  • с учётом прав доступа пользователя.

Интерфейс

public interface IContextEntityService<TEntity> where TEntity : class, IEntity
{
    Task<TEntity> InsertAsync(TEntity detachedEntity, bool checkRights = true);
    Task<TEntity> UpdateAsync(TEntity detachedEntity, bool checkRights = true);
    Task<TEntity> DeleteAsync(Guid entityId, bool checkRights = true);
    Task<TEntity> GetAsync(Guid entityId, bool checkRights = true);

    IQueryable<TEntity> Get(
        Expression<Func<TEntity, bool>> condition = null,
        bool checkRights = true
    );

    Task CheckCanInsertAsync(TEntity entity);
    Task CheckCanEditAsync(TEntity entity);
    Task CheckCanEditAsync(Guid entityId);
    Task CheckCanDeleteAsync(TEntity entity);
    Task CheckCanExecuteAsync(Guid entityId, string granular);
    Task CheckCanViewAsync(Guid entityId, string granularName = null);

    Task<IQueryable<TCollectionType>> GetNavigationAsync<TCollectionType>(
        Guid key,
        Expression<Func<TCollectionType, Guid>> foreignKeyExpression
    ) where TCollectionType : Entity;

    Task<List<TCollectionType>> UpdateNavigationAsync<TCollectionType>(
        Guid key,
        Expression<Func<TCollectionType, Guid>> foreignKeyExpression,
        ICollection<TCollectionType> collection,
        Func<TCollectionType, object> groupByExpression = null
    ) where TCollectionType : Entity;
}

CRUD операции

Основные операции работы с сущностями:

  • InsertAsync
  • UpdateAsync
  • DeleteAsync
  • GetAsync
  • Get

InsertAsync

Создаёт новую сущность.

Task<TEntity> InsertAsync(TEntity detachedEntity, bool checkRights = true)

Параметры:

  • detachedEntity — новая сущность, не привязанная к DbContext;
  • checkRights — определяет, необходимо ли проверять права пользователя.

Метод возвращает сущность, добавленную в контекст.

UpdateAsync

Обновляет существующую сущность на основе переданной модели.

Task<TEntity> UpdateAsync(TEntity detachedEntity, bool checkRights = true)

detachedEntity должен содержать идентификатор существующей сущности.

DeleteAsync

Удаляет сущность по идентификатору.

Task<TEntity> DeleteAsync(Guid entityId, bool checkRights = true)

GetAsync

Получает сущность по идентификатору.

Task<TEntity> GetAsync(Guid entityId, bool checkRights = true)

Get

Возвращает IQueryable<TEntity> для построения запросов.

IQueryable<TEntity> Get(
    Expression<Func<TEntity, bool>> condition = null,
    bool checkRights = true
)

Особенности:

  • запрос выполняется без отслеживания (NoTracking);
  • применяется фильтрация прав доступа;
  • condition позволяет задать предикат фильтрации.

Пример:

var service = context.GetEntityService<Project>();

var projects = service
    .Get(p => p.StatusId == statusId)
    .ToList();

Проверка прав доступа

Методы проверки прав позволяют проверить возможность выполнения операции без фактического изменения данных.

Если пользователь не обладает необходимыми правами — выбрасывается исключение.

Доступные проверки:

  • CheckCanInsertAsync
  • CheckCanEditAsync
  • CheckCanDeleteAsync
  • CheckCanExecuteAsync
  • CheckCanViewAsync

CheckCanInsertAsync

Проверяет право на создание сущности.

Task CheckCanInsertAsync(TEntity entity)

CheckCanEditAsync

Проверяет право редактирования сущности.

Task CheckCanEditAsync(TEntity entity)
Task CheckCanEditAsync(Guid entityId)

CheckCanDeleteAsync

Проверяет право удаления сущности.

Task CheckCanDeleteAsync(TEntity entity)

CheckCanExecuteAsync

Проверяет право выполнения действия над сущностью.

Task CheckCanExecuteAsync(Guid entityId, string granular)

granular — имя гранулярного права.

CheckCanViewAsync

Проверяет право просмотра сущности.

Task CheckCanViewAsync(Guid entityId, string granularName = null)

Работа со связанными коллекциями

Сервис также предоставляет методы для работы с навигационными коллекциями.

GetNavigationAsync

Получает связанные сущности.

Task<IQueryable<TCollectionType>> GetNavigationAsync<TCollectionType>(
    Guid key,
    Expression<Func<TCollectionType, Guid>> foreignKeyExpression
)

Параметры:

  • key — идентификатор основной сущности;
  • foreignKeyExpression — выражение, определяющее внешний ключ.

Пример:

var tasks = await projectService.GetNavigationAsync<ProjectTask>(
    projectId,
    t => t.ProjectId
);

UpdateNavigationAsync

Обновляет связанную коллекцию сущностей.

Task<List<TCollectionType>> UpdateNavigationAsync<TCollectionType>(
    Guid key,
    Expression<Func<TCollectionType, Guid>> foreignKeyExpression,
    ICollection<TCollectionType> collection,
    Func<TCollectionType, object> groupByExpression = null
)

Метод:

  • добавляет новые элементы коллекции;
  • обновляет существующие;
  • удаляет отсутствующие элементы.

Параметры:

  • key — идентификатор основной сущности;
  • foreignKeyExpression — выражение внешнего ключа;
  • collection — новая коллекция элементов;
  • groupByExpression — функция группировки элементов (используется для корректного обновления коллекций).
Предыдущая
 DynamicCodeContext
Следующая
SafeHttpClient 

Содержание

Интерфейс CRUD операции InsertAsync UpdateAsync DeleteAsync GetAsync Get Проверка прав доступа CheckCanInsertAsync CheckCanEditAsync CheckCanDeleteAsync CheckCanExecuteAsync CheckCanViewAsync Работа со связанными коллекциями GetNavigationAsync UpdateNavigationAsync
Ничего не найдено

Перейти на русскую версию?