Syntax to define a NHibernate Filter with Fluent Nhibernate?
If you build Fluent from source, there is now support for filters. You use them like this:
First create a class inheriting from FluentNHibernate.Mapping.FilterDefinition
:
using FluentNHibernate.Mapping;
namespace PonyApp.FluentFilters
{
public class PonyConditionFilter : FilterDefinition
{
public PonyConditionFilter()
{
WithName("PonyConditionFilter")
.AddParameter("condition",NHibernate.NHibernateUtil.String);
}
}
}
In your ClassMap for your class, use the ApplyFilter method:
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");
}
}
}
Then add the filter to your fluent config:
Fluently.Configure()
.Mappings(m => m.FluentMappings.Add(typeof(PonyConditionFilter)))
//blah blah bunches of other important stuff left out
.BuildSessionFactory();
Then you can turn it on and off just as you would with vanilla NHibernate:
session.EnableFilter("PonyConditionFilter").SetParameter("condition","Wonderful");
In case anyone's still watching this, I've just submitted a patch on Google code for Fluent NHibernate to support filters. You can see it in use in snicker's answer above.