Нужна помощь в создании гибкой сущности nhibernate - PullRequest
1 голос
/ 31 июля 2011

Я создаю веб-приложение для управления документами. Эти документы имеют этапы. Пользователи смогут отклонить эти документы с текущего этапа на предыдущий этап.

Таким образом, последовательность операций будет аналогична утвержденной стадии первого документа> Получить следующую стадию и установить стадию документа на следующую стадию> Первая стадия документа ОТРАЖЕНА> Получить предыдущую стадию и установить стадию документа на предыдущую стадию.

Теперь мне нужна помощь в том, как управлять стадиями назад и вперед и как лучше всего настроить мои сущности?

Пример сущностей

public class Document
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Stage Stage { get; set; }
}

public class Stage
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

1 Ответ

1 голос
/ 31 июля 2011

Использовать enum

Замените вашу ступень класса на Enum

public enum Stage
{
   Rejected, None, Approved, Etc 
}

В простом отображении NHibernate добавьте перечисление Stage на карту

<property name="Stage"></property>

В вашей базе данных вы можете просто создать столбец Stage для int32, и Nhibernate выяснит, как сохранить и автоматически загрузить enum.

Преимущество использования enum состоит в том, что вы всегда можете привести enum к int и уменьшить или увеличить, чтобы получить предыдущий или следующий этап (при условии, что вы просто добавляете их в 0..N).

Stage nextStage = (Stage)(((int)currentDocument.Stage)++);
Stage previousStage = (Stage)(((int)currentDocument.Stage)--);

В противном случае вы можете использовать запрос linq для получения предыдущего или следующего шага.

Редактировать

До сих пор в своих требованиях вы не указывали, что вам нужно что-либо из сложности общего рабочего процесса. Вот пример приложения, в котором используется WWF с системой утверждения документов, аналогичной тому, что вам требуется.

Пока вам действительно не понадобится что-то из сложности WWF. Я бы порекомендовал вам использовать enum, а затем рефакторинг, когда ваши требования изменятся. Таким образом, вы не реализуете функцию «на всякий случай».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...