Ответ 1
Это недавнее сообщение в обсуждении Fluent NHibernate заставляет меня думать, что фильтры еще не поддерживаются Fluent API.
Кажется, я не могу найти правильный синтаксис для определения фильтра nhibernate с использованием свободного Nhibernate.
Я пытаюсь следить за этой блог-страницей ayende:
http://ayende.com/Blog/archive/2006/12/26/LocalizingNHibernateContextualParameters.aspx
Я определил формулу по моему свойству с помощью метода .FormulaIs(), но не могу найти в google, как перевести это определение на свободное nhibernate:
< filter-def name='CultureFilter'>
< filter-param name='CultureId' type='System.Int32'/>
< /filter-def>
Это недавнее сообщение в обсуждении Fluent NHibernate заставляет меня думать, что фильтры еще не поддерживаются Fluent API.
Если вы создадите Fluent из исходного кода, теперь есть поддержка фильтров. Вы используете их следующим образом:
Сначала создайте класс, наследующий от FluentNHibernate.Mapping.FilterDefinition
:
using FluentNHibernate.Mapping;
namespace PonyApp.FluentFilters
{
public class PonyConditionFilter : FilterDefinition
{
public PonyConditionFilter()
{
WithName("PonyConditionFilter")
.AddParameter("condition",NHibernate.NHibernateUtil.String);
}
}
}
В ClassMap для вашего класса используйте метод ApplyFilter:
namespace PonyApp.Entities.Mappings
{
public class PonyMap : ClassMap<Pony>
{
public PonyMap()
{
Id(x => x.Id);
Map(x => x.PonyName);
Map(x => x.PonyColor);
Map(x => x.PonyCondition);
ApplyFilter<PonyConditionFilter>("PonyCondition = :condition");
}
}
}
Затем добавьте фильтр в вашу свободную конфигурацию:
Fluently.Configure()
.Mappings(m => m.FluentMappings.Add(typeof(PonyConditionFilter)))
//blah blah bunches of other important stuff left out
.BuildSessionFactory();
Затем вы можете включать и выключать его так же, как и с vanilla NHibernate:
session.EnableFilter("PonyConditionFilter").SetParameter("condition","Wonderful");
В случае, если кто-то все еще наблюдает за этим, я только что отправил патч в коде Google для Fluent NHibernate для поддержки фильтров. Вы можете видеть, как он используется в смешном ответе выше.