我正在使用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生成器的组合,并得到这个工作?