Синтаксис для определения фильтра NHibernate с Fluent Nhibernate? - PullRequest
21 голосов
/ 07 июня 2009

Кажется, я не могу найти правильный синтаксис для определения фильтра nhibernate, используя свободный Nhibernate.

Я пытаюсь следить за постом этого айенда:

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> 

Ответы [ 3 ]

60 голосов
/ 12 марта 2010

Если вы строите 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();

Затем вы можете включать и выключать его, как если бы вы использовали ванильный NHibernate:

session.EnableFilter("PonyConditionFilter").SetParameter("condition","Wonderful");
9 голосов
/ 28 июля 2009

На случай, если кто-нибудь все еще смотрит это, я только что отправил патч на код Google для Fluent NHibernate для поддержки фильтров. Это можно увидеть в ответе Сникера выше.

6 голосов
/ 07 июня 2009

Этот недавний пост в обсуждении Fluent NHibernate заставляет меня поверить, что фильтры еще не поддерживаются Fluent API.

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