【问题标题】:Nhibernate 'Not all named parameters have been set' when using spatial query使用空间查询时休眠“未设置所有命名参数”
【发布时间】:2013-08-01 06:44:46
【问题描述】:

这是我的查询

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 查询来避免这个错误吗?

谢谢

【问题讨论】:

  • . 代替 :: 有效吗?
  • 这不起作用,但它确实让我思考。也许我缺少 :: 的替代方法。
  • 我在语句顶部使用“DECLARE @dist AS Geography = 'POINT({0} {1})' 和“l.GeoLoc.STDistance(@dist.STBuffer(0.2 ).STAsText()) as Distance" 代替有问题的行所在的位置。我对这个解决方案不太满意,所以我会将答案再开放几天,以防有人有替代方案。
  • 问题是: 被用作参数的占位符。 AFAIK 你无法逃脱: 因此我认为你的黑客应该没问题。我认为您尝试过使用 \: 或 ::::

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


【解决方案1】:

正如我在上面的 cmets 中所述。解决方案是以不同的方式重写查询 我用

替换了“geography::STGeomFromText”
l.GeoLoc.STDistance(@dist.STBuffer(0.2).STAsText()) as Distance

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

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

【讨论】:

    【解决方案2】:

    尝试从 SQL 字符串中删除冒号字符。甚至 cmets 中的冒号也会导致此错误。下面的解决方法是将“Note:”更改为“Note”。

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多