NHibernate - Сортировка объектов на основе свойства / столбца + как управлять? - PullRequest
0 голосов
/ 26 января 2010

Я пишу приложение электронной коммерции ASP.NET MVC с использованием NHibernate, и я хочу, чтобы конечный пользователь мог контролировать порядок размещения категорий товаров (а не просто отображать их в алфавитном порядке и т. Д.).

Обычно я бы добавил столбец OrderIndex / Sort (типа int) в таблицу Category, а свойство - в класс домена Category. Но проблема заключается в необходимости постоянно управлять этим специальным столбцом OrderIndex / Sort, поскольку категории сортируются, добавляются и удаляются. Я предпочел бы скрыть это и сделать его прозрачным, чтобы вызывающим не приходилось устанавливать свойство напрямую.

Конечно, я мог бы написать свой собственный код для управления всем этим, но хотел знать, есть ли в NHibernate что-нибудь, что могло бы помочь мне, или оно могло бы автоматически подключить это свойство.

Если нет, то я думал о создании базового класса OrderedEntity (все доменные объекты наследуются от базы Entity), а также о создании базового репозитория IOrderedRepository. Примерно так:

public class Entity
{
    public virtual int Id { get; set; }
}

public class OrderedEntity : Entity
{
    public virtual int OrderIndex { get; set; }
}

public class Category : OrderedEntity
{

}

public interface IRepository<T> where T : Entity
{
    T FromId(int id);
    void Save(T entity);
}

public interface IOrderedRepository<T> : IRepository<T> where T : OrderedEntity
{
    void MoveUp(int places);
    void MoveDown(int places);
}

Это похоже на хороший подход? Я не хочу изобретать низшее колесо.

1 Ответ

1 голос
/ 26 января 2010

Пока я знаю, что Hibernate имеет аннотацию @OrderBy, где вы можете указать порядок, когда коллекция загружена . Но Hibernate не будет управлять той позицией, которая вам подходит, когда вы add или remove элемент в коллекции.

Однако вы можете легко сделать это самостоятельно и предоставить методы addItem и removeItem для родительской сущности , которые будут отслеживать позицию (или методы MoveUp и MoveDown как Вы предлагаете).

...