FluentNHibernate配置LINQTOHQLgeneratorRegistry和自定义Linq SQL Server 2008

FluentNHibernate配置LINQTOHQLgeneratorRegistry和自定义Linq SQL Server 2008,nhibernate,fluent-nhibernate,linq-to-nhibernate,Nhibernate,Fluent Nhibernate,Linq To Nhibernate,我想使用LinqToHqlGeneratorsRegistry创建一个新的Linq自定义方法,要使用SQL Server 2008STDistance地理功能,我该怎么做: 1) 将我的高级方法(Coordinate.DistanceTo(other)实例方法)映射到SQL Server中的geoPoint.STDistance(otherGeoPoint)?我的尝试是: public class DistanceMethodGenerator : BaseHqlGeneratorForMeth

我想使用
LinqToHqlGeneratorsRegistry
创建一个新的Linq自定义方法,要使用SQL Server 2008
STDistance
地理功能,我该怎么做:

1) 将我的高级方法(
Coordinate.DistanceTo(other)
实例方法)映射到SQL Server中的
geoPoint.STDistance(otherGeoPoint)
?我的尝试是:

public class DistanceMethodGenerator : BaseHqlGeneratorForMethod
{
    public DistanceMethodGenerator()
    {
        base.SupportedMethods = new[] { ReflectionHelper.GetMethodDefinition<ICoordinate>(coordinate => coordinate.DistanceTo(null)) };
    }
    public override HqlTreeNode BuildHql(MethodInfo method, System.Linq.Expressions.Expression targetObject, ReadOnlyCollection<System.Linq.Expressions.Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)
    {

        //what to do here to tranform: coord.DistanceTo(otherCoord) in sql     //coord.STDistance(otherCoord)?
        return ????
    }
}
public sealed class LinqToSqlGeneratorRegistrypublic : DefaultLinqToHqlGeneratorsRegistry
{
    public LinqToSqlGeneratorRegistrypublic()
    {
        RegisterGenerator(ReflectionHelper.GetMethodDefinition<ICoordinate>(coordinate => coordinate.DistanceTo(null)),
                          new DistanceMethodGenerator());
    }
}
公共类距离方法生成器:BaseHqlGeneratorFormMethod
{
公共距离方法生成器()
{
base.SupportedMethods=new[]{ReflectionHelper.GetMethodDefinition(坐标=>coordinate.DistanceTo(null))};
}
公共重写HqlTreeNode BuildHql(MethodInfo方法,System.Linq.Expressions.Expression targetObject,ReadOnlyCollection参数,HqlTreeBuilder treeBuilder,IHqlExpressionVisitor)
{
//在sql//coord.STDistance(otherCoord)中如何将:coord.distance转换为(otherCoord)?
返回????
}
}
公共密封类LinqToSqlGeneratorRegistrypublic:DefaultLinqToHqlGeneratorsRegistry
{
public LinqToSqlGeneratorRegistrypublic()
{
RegisterGenerator(ReflectionHelper.GetMethodDefinition(坐标=>coordinate.DistanceTo(null)),
新的DistanceMethodGenerator());
}
}
2) 如何向fluentNHibernate注册,我在fluentNHibernate中找不到类似
LinqToHqlGeneratorsRegistry()
的方法

谢谢

试试这个:

.ExposeConfiguration(c =>
{
  c.Properties.Add(NHibernate.Cfg.Environment.LinqToHqlGeneratorsRegistry, typeof(LinqToSqlGeneratorRegistrypublic).AssemblyQualifiedName)
}
试试这个:

.ExposeConfiguration(c =>
{
  c.Properties.Add(NHibernate.Cfg.Environment.LinqToHqlGeneratorsRegistry, typeof(LinqToSqlGeneratorRegistrypublic).AssemblyQualifiedName)
}

这种配置已经存在于我的代码中,重点是:当数据库函数调用类似于“coord1.STDistance(coord2)”而不是“dbo.distanceTo(coord1,coord2)”时如何实现BuildHql方法。这种配置已经存在于我的代码中,重点是:当数据库函数调用类似于“coord1.STDistance”时如何实现BuildHql方法(coord2)”而不是“dbo.distanceTo(coord1,coord2)”。