Nhibernate'使用空间查询时,并未设置所有命名参数

时间:2013-08-01 06:44:46

标签: nhibernate fluent-nhibernate sql-server-2012 geography

这是我的查询

var selectDinnerByDistance = string.Format(
            @"Select 
                u.ProfileImageUrl as ProfileImageUrl, 
                d.Starter as Starter,
                d.Main as Main,
                d.Dessert as Dessert,
                d.Dry as DryDinner,
                d.[Date] as EventDate,
                l.GeoLoc.STDistance(geography::STGeomFromText('POINT({0} {1})', 4326)) as Distance
                from dbo.Locations l
                join Dinners d on d.LocationId = l.Id
                join Users u on u.Id = d.UserId
                Order by Distance asc
                OFFSET {2} ROWS
                FETCH NEXT {3} ROWS ONLY"
            , lat, lng, skip, take);
var output = _session
     .CreateSQLQuery(selectDinnerByDistance)
     .SetResultTransformer(Transformers.AliasToBean<DinnerListItemDto>())
     .List<DinnerListItemDto>();

我得到的例外是

Not all named parameters have been set: [':STGeomFromText']

查询在管理工作室中运行良好。有没有其他方法,我应该使用直接的SQL查询来避免此错误?

由于

2 个答案:

答案 0 :(得分:2)

正如我在上述评论中所述。解决方案是以不同的方式重写查询 我替换了#34; geography :: STGeomFromText&#34;与

l.GeoLoc.STDistance(@dist.STBuffer(0.2).STAsText()) as Distance

并将以下内容放在查询的顶部

DECLARE @dist AS Geography = 'POINT({0} {1})'

答案 1 :(得分:0)

尝试从SQL中删除冒号(可能修复了雅各布的代码)。以下示例使用C#ASP.NET MVC,NHibernate和MySQL进行项目。删除sql中的冒号&#34; - &#34;评论修正了错误。

string sql = string.Format(@"select o.orderid from order o
    where o.orderid in (1, 2, 3)   -- Note: Orders 1-3 special
    {0} {1};",
    whereDates, orderBy);