2016-11-09 64 views
0

我正在使用NHibernate和NHibernate.Spatial。后者是在配置定义为与该值的话:添加LinqToHqlGeneratorsRegistry不包括方言方法

<property name="dialect">NHibernate.Spatial.Dialect.MsSql2012GeometryDialect, NHibernate.Spatial.MsSql</property> 

当我建立会话工厂和评价它,它示出了189种命名方法(参见Settings.LinqToHqlGeneratorsRegistry.registeredMethods)。

没有方言的数目为147的区别解析为典型的空间功能,如内,距离,面积

我需要字符串连接的支持,所以我创建了一个定制HQL发电机这样:

public class ConcatHqlGenerator : BaseHqlGeneratorForMethod 
{ 
    public ConcatHqlGenerator() : base() 
    { 
     SupportedMethods = new[] 
     { 
      ReflectionHelper.GetMethodDefinition(() => string.Concat(null, null)), 
      ReflectionHelper.GetMethodDefinition(() => string.Concat(null, null, null)), 
      ReflectionHelper.GetMethodDefinition(() => string.Concat(null, null, null, null)) 
     }; 
    } 
    public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, 
     HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) 
    { 
     return treeBuilder.Concat(new[] 
     { 
      visitor.Visit(arguments[0]).AsExpression(), visitor.Visit(arguments[1]).AsExpression() 
     }); 
    } 
} 

public class LinqToHqlGeneratorsRegistry : DefaultLinqToHqlGeneratorsRegistry 
{ 
    public LinqToHqlGeneratorsRegistry() : base() 
    { 
     this.Merge(new ConcatHqlGenerator()); 
    } 
} 

之前建立会话工厂这样,我注册:

configuration.Properties.Add(NHibernate.Cfg.Environment.LinqToHqlGeneratorsRegistry, typeof(LinqToHqlGeneratorsRegistry).AssemblyQualifiedName); 

然而,当我做到这一点的空间方法(由方言介绍)不加载并使用LINQ功能,如等评估的设置也当我得到的错误显示,注册方法计数为150 ,这是默认的147和额外的自定义三。

有没有人使用过NHibernate.Spatial,还创建了自定义HQL生成器的组合,并得到这个工作?

回答

0

继承NHibernate.Spatial.Linq.Functions.SpatialLinqToHqlGeneratorsRegistry而不是NHibernate.Linq.Functions.DefaultLinqToHqlGeneratorsRegistry