.NET 4.6 / Entity Framework:不支持空间函数

时间:2015-09-01 17:02:06

标签: .net sql-server spatial dnx

这可能是远景,我想我已经有了答案,但是我想知道是否有人以不同的方式解决了这个问题。使用实体框架btw。

好的,我从数据库中获取地图(边界)的多边形,并希望直接减少调用中的点数。太棒了,SqlServer实际上有空间功能" Reduce"内置。

这是我的代码:

Sub ToggleChevron3_Click()

Application.ScreenUpdating = False

Dim bToggle As Boolean

bToggle = ActiveSheet.AutoFilterMode

If bToggle Then

    ActiveSheet.AutoFilterMode = False

Else

    Dim rng As Range

    Set rng = Range("A1:E100") 'used E because you had an offset of 4 columns

    With rng
        .AutoFilter 5, "<>"
        .AutoFilter 1, "<>"
    End With

End If

Application.ScreenUpdating = True

End Sub

很好,一切都很好,直到它真正达到减少功能。 mehmehmehm:它抛出了一个不受支持的异常。

嗯,我深入挖掘了一下,实际上遇到了这个参考:

http://referencesource.microsoft.com/#System.Data.Entity/System/Data/Objects/SqlClient/SqlSpatialFunctions.cs

看起来它甚至没有实现:

data = (from c in context.Spatial_Zips
    where zips.Contains(c.regionname)
    select new Spatial_Zip() {
        ID = c.ID,
        regionname = c.regionname,
        pcnameimp = c.pcnameimp,
        geog = SqlSpatialFunctions.Reduce(c.geog, 100)
    }).ToList();    

现在我的问题是,是否有人知道如何使用实体框架在原始SQL中执行此语句?

我认为目前还没有其他选择,或者在那里?

1 个答案:

答案 0 :(得分:0)

有数据库实例作为DbContext的属性。您可以使用Database类的SqlQuery方法来发出原始SQL。

例如

var directQuery = context.Database.SqlQuery<Spatial_Zip>(sql, new object[] { }).ToList();

请查看www.asp.net了解详情。