首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fluent nHibernate自动映射的属性筛选器

使用fluent nHibernate自动映射的属性筛选器
EN

Stack Overflow用户
提问于 2011-04-20 18:35:45
回答 1查看 2.8K关注 0票数 4

我正在尝试创建一个过滤器,使用fluent nH (1.2)和nH 2.1.2的自动映射。

我遵循了示例here,但不断收到异常:

代码语言:javascript
复制
filter-def for filter named 'DateFilter' was never used to filter classes nor collections..  

filter类:

代码语言:javascript
复制
public class DateFilter : FilterDefinition
    {
        public DateFilter()
        {
            WithName(Consts.FilterConsts.DATE_FILTER)
                .AddParameter("date", NHibernate.NHibernateUtil.DateTime)
                .WithCondition("DATEPART(dayofyear,EntityTime) = DATEPART(dayofyear, :date)")
                ;
        }
    }

在映射覆盖中:

代码语言:javascript
复制
mapping.HasMany(x => x.Stuff)
                .LazyLoad()
                .ReadOnly()
                .ApplyFilter<DateFilter>();

这是我的配置代码。

代码语言:javascript
复制
Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008
                .DefaultSchema("dbo")               //set default schema to enable full-qualified queries
                .AdoNetBatchSize(batchSize > 0 ? batchSize : 1)
                .UseReflectionOptimizer()
                .ConnectionString(c => c.FromConnectionStringWithKey(connectionStringKey))
                    .Cache(c => c.UseQueryCache()
                                    .ProviderClass(
                                    isWeb ? typeof(NHibernate.Caches.SysCache2.SysCacheProvider).AssemblyQualifiedName //in web environment- use sysCache2
                                        : typeof(NHibernate.Cache.HashtableCacheProvider).AssemblyQualifiedName //in dev environmet- use stupid cache
                                    )) 
                          )
                 .Mappings(m => m.AutoMappings.Add(
                    AutoMap.AssemblyOf<Domain.Entity>(cfg)     //automapping the domain entities
                    .IncludeBase<Domain.SomethingBase>()               //ensure that although SomethingBase is a base class, map it as well. this enables us to store all Something sub-classes in the same table
                    .IncludeBase<Domain.OrOtherBase>()    //create a table for the abstract 'OrOtherBase' class
                    .UseOverridesFromAssemblyOf<MappingOverrides.MappingOverride>()
                    .Conventions.Add(DefaultCascade.All())      //make sure that all saves are cascaded (i.e when we save a zone, its queues are saved as well)
                    .Conventions.AddFromAssemblyOf<IdGenerationWithHiLoConvention>()
                    ))
                 .Mappings(m => m.FluentMappings.Add(typeof(DateFilter)));

如果我将行移动到自动映射部分之前,我会得到一个异常:

代码语言:javascript
复制
 NHibernate.MappingException: filter-def for filter named 'DateFilter' was not found.  

有人能告诉我我哪里做错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-01 00:52:15

好了,我想通了。当你像这样单独添加映射时,它们最终会出现在不同的映射中,它要么会抱怨你从未使用过过滤器,要么会抱怨它找不到过滤器,因为它不是在两个地方都找得到。解决方案是直接将其添加到自动映射中,因此在您的示例中如下所示:

代码语言:javascript
复制
//other stuff up here
.Mappings(m => m.AutoMappings.Add(() => {
    var a = AutoMap.AssemblyOf<Domain.Entity>(cfg) 
                .IncludeBase<Domain.SomethingBase>() //and also cascades and conventions and stuff
    a.Add(typeof(DateFilter));
    return a;
 }));

有点恶心,因为.Add()不流利,但它确实可以工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5728935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档