[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); } }