Как добавить определения фильтров с отображением Nhibernate 3.2 по коду? - PullRequest
5 голосов
/ 28 октября 2011

Кажется, что ModelInspector не предоставляет средства для определения определений фильтра.Любые идеи / обходные пути?

Мне нужно сгенерировать следующее с отображениями по коду:

<filter-def name="filterName" use-many-to-one="false">
  <filter-param name="filterParamName" type="Int32"/>
</filter-def>

Ответы [ 2 ]

9 голосов
/ 11 ноября 2011

Мне удалось добиться этого с помощью NHibernate.Cfg.Configuration:

var cfg = new Configuration();

var filterDef = new FilterDefinition(
    "filterName",
    null, // or your default condition
    new Dictionary<string, IType> { { "filterParamName", NHibernateUtil.Int32 } },
    false);
cfg.AddFilterDefinition(filterDef);

// cfg.AddMapping(...)
// cfg.DataBaseIntegration(...)

var sessionFactory = cfg.BuildSessionFactory();

, затем определить фильтр в сопоставлении сущностей:

public class EntityMap : ClassMapping<Entity>
{
    public EntityMap()
    {
        Table("Entity");
        Filter("filterName", m => m.Condition("FilteredField = :filterParamName"));
        // remaining mapping
    }
}

, а затем использовать его следующим образом:

using(var session = sessionFactory.OpenSession())
{
    var filterValue = 123;
    session
        .EnableFilter("filterName")
        .SetParameter("filterParamName", filterValue);
}

Надеюсь, вы найдете это полезным.

6 голосов
/ 05 апреля 2012

FYI,

Важно отметить, что звонок на AddFilterDefinition раньше AddMapping, в противном случае вы получите ArgumentException("An item with the same key has already been added")!

...