在运行时动态地将 NHibernate 过滤器定义添加到所有表

Adding NHibernate Filter definition to all the tables dynamically at runtime

我使用代码映射方法来定义实体映射。现在我想在大约 200 个映射 class 上配置相同的 filter。有什么方法可以在 运行 时间动态添加过滤器映射吗?

我的 class-映射看起来与下面类似。

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

我不想在所有 class 映射中粘贴下面的过滤器映射,我想在 运行 时间映射过滤器。

Filter("filterName", m => m.Condition("FilteredField = :filterParamName"));

ModelMapper(应该在代码中的某处使用 'compile' 所有映射并将它们提供给 Configuration) class 包含许多 After/Before 事件允许动态修改映射。 AfterMapClassBeforeMapClass 似乎对您有用。类似于:

var mapper = new ModelMapper();
mapper.AfterMapClass +=
    (inspector, type, customizer) =>
    {
        customizer.Filter("filterName", m => m.Condition("FilteredField = :filterParamName")); 
    };