logo

[ELMA3] Менеджеры сущностей

Базовый менеджер

Для созданного в редакторе сущностей типа сущности по умолчанию создается базовый менеджер.

public class EntityManager<T, IdT> : AbstractNHEntityManager<T, IdT> where T : IEntity<IdT>
{
}

Данный менеджер уже содержит определенный набор методов для работы с объектами. Основные методы:

//Загрузка объекта из БД по уникальному идентификатору (тип идентификатора настраивается в редакторе сущностей)
//Если объекта с заданным id не существует, то кидается исключение
public sealed override T Load(IdT id)

//Загрузка объекта из БД по уникальному идентификатору (тип идентификатора настраивается в редакторе сущностей)
//Если объекта с заданным id не существует, то возвращается null 
public sealed override T LoadOrNull(IdT id)

//Сохранение объекта в БД
public sealed override void Save(T obj)

//Записать изменения в БД
public sealed override void Update(T obj)

//Удалить объект из БД
public sealed override void Delete(T obj)

//Удалить все объекты данного типа
public override void DeleteAll()

//Перечитать объект из БД (при этом обновляется кэш по этому объекту)
public sealed override void Refresh(T obj)

//Получить все объекты данного типа
public sealed override ICollection<T> FindAll()

//Получить все объекты, удовлетворяющие фильтру (учитывается тот фильтр, который генерируется для типа объекта в редакторе сущностей)
public sealed override ICollection<T> Find(Filter filter, FetchOptions fetchOptions)

Для того чтобы получить базовый менеджер по типу объекта используется: EntityManager<TEntity>.Instance

Переопределение базового менеджера

В случае когда нужно переопределить поведение стандартного менеджера, нужно написать новый класс и унаследовать его от EntityManager. Для примера, допустим, что стоит задача кодирование пароля и создания папки "Мои документы" для каждого нового пользователя создаваемого в системе. Для реализации нужно в менеджере для типа объекта User переопределить метод сохранения объекта в БД.

public class UserManager : EntityManager<User, long>
{
//метод для создания папки "Мои документы" для пользователя user
private static void CreateFolders(User user)
{
if (MyDocumentFolderManager.Instance.LoadByUser(user) == null)
{
MyDocumentFolderManager.Instance.CreateForUser(user);
}
}

//Переопределяем метод сохранения пользователя в БД
protected override void SaveEntity(User obj)
{
//Если объект новый
if (obj.Id == 0)
//Шифруем пароль
obj.Password = EncryptionHelper.GetMd5Hash(obj.Password);
//Вызываем базовый метод сохранения объекта в БД
base.SaveEntity(obj);
if (obj.Id > 1)
//Создаем папку "Мои документы" (если она еще не создана)
CreateFolders(obj);
}
}