Как добавить определения фильтров с помощью NHibernate 3.2 mapping by code?
ModelInspector, похоже, не предоставляет средств для определения определений фильтров . Есть идеи / обходные пути?
Мне нужно сгенерировать следующее С отображениями по коду:
<filter-def name="filterName" use-many-to-one="false">
<filter-param name="filterParamName" type="Int32"/>
</filter-def>
2 ответа:
Я смог добиться этого, используя NHibernate.Контекстно-свободная грамматика.Конфигурация:
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); }
Я надеюсь, что вы найдете это полезным.