用 Fluent Nhibernate 定义 NHibernate 过滤器的语法?
Posted
技术标签:
【中文标题】用 Fluent Nhibernate 定义 NHibernate 过滤器的语法?【英文标题】:Syntax to define a NHibernate Filter with Fluent Nhibernate? 【发布时间】:2010-10-31 22:19:55 【问题描述】:我似乎找不到正确的语法来使用流利的 Nhibernate 定义一个 nhibernate 过滤器。
我正在尝试关注这个 ayende 的博文:
http://ayende.com/Blog/archive/2006/12/26/LocalizingNHibernateContextualParameters.aspx
我使用 .FormulaIs() 方法在我的属性上定义了公式,但在谷歌上找不到如何将此定义翻译成流畅的 nhibernate:
< filter-def name='CultureFilter'>
< filter-param name='CultureId' type='System.Int32'/>
< /filter-def>
【问题讨论】:
【参考方案1】:This recent post 在 Fluent NHibernate 讨论中让我相信 Fluent API 尚不支持过滤器。
【讨论】:
投反对票,因为在回答时不支持的功能后来变得支持?这太苛刻了。 我同意投反对票是苛刻的,但您仍然可能需要更新您的答案以记录框架的当前状态。【参考方案2】:如果有人还在看这个,我刚刚提交了一个 Google 代码补丁,用于 Fluent NHibernate 以支持过滤器。您可以在上面窃笑的回答中看到它的使用情况。
【讨论】:
【参考方案3】:如果您从源代码构建 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");
【讨论】:
2013 - 现在可以在 fluentNHibernate 中使用,无需从源代码构建。 您的评论对我帮助很大。谢谢你。顺便说一句,如果已经有这样的行,则不需要将过滤器添加到流利的配置中的步骤: .Mappings(m => m.FluentMappings.AddFromAssemblyOf以上是关于用 Fluent Nhibernate 定义 NHibernate 过滤器的语法?的主要内容,如果未能解决你的问题,请参考以下文章
用 Fluent Nhibernate 定义 NHibernate 过滤器的语法?
在没有 .hbm 或 xml 文件的 NHibernate Fluent 映射中定义命名查询
我在哪里可以找到 Fluent NHibernate 教程?