我正在使用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生成器的組合,並得到這個工作?