用 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 会“检测”它.

以上是关于用 Fluent Nhibernate 定义 NHibernate 过滤器的语法?的主要内容,如果未能解决你的问题,请参考以下文章

用 Fluent Nhibernate 定义 NHibernate 过滤器的语法?

在没有 .hbm 或 xml 文件的 NHibernate Fluent 映射中定义命名查询

我在哪里可以找到 Fluent NHibernate 教程?

使用自动映射时如何使用 Fluent NHibernate Validator?

NHibernate 2.1.2 - 如何禁用反射优化器

Fluent NHibernate and Mysql,SQLite