NHibernate сопоставляет перечисления со строковым представлением, если столбец SQL является строковым типом, и это значение по умолчанию, если вы разрешаете NHibernate генерировать схему.
так:
ALTER TABLE Run ALTER COLUMN Status varchar(20)
и в отображении
<class name="Run">
<!- [...] -->
<property name="Status"/>
</class>
Теперь таблица SQL будет содержать строковое представление перечисления. Теперь формула может запросить ее:
<property name="ActiveRunCount" formula="
(select count(r.Id) from Run r
where r.ContainerId=Id and r.Status='Active')"/>
(Если у вас уже есть данные в таблицах, вы должны написать преобразование вместо простого оператора ALTER COLUMN).
РЕДАКТИРОВАТЬ после комментария:
Чтобы сгенерировать файл сопоставления и убедиться, что в формуле указано правильное значение enum, вы можете использовать FluentNhibernate . Сопоставление для свойства ActiveRun будет выглядеть следующим образом:
Map(x => x.ActiveRunCount)
.Formula(string.Format("(select count(r.Id) [...] and r.Status='{0}')",
RunStatus.Active))
Если это то, что вы искали, вы также можете оставить целые числа в столбцах и сделать это:
Map(x => x.ActiveRunCount)
.Formula(string.Format("(select count(r.Id) [...] and r.Status={0})",
(int)RunStatus.Active))