繁体   English   中英

.NET 4.6 /实体框架:不支持空间函数抛出

[英].NET 4.6 / Entity Framework : Spatial functions throw not supported

这可能是一个长镜头,我想我已经找到了答案,但是我想看看是否有人以不同的方式解决了这个问题。 使用实体框架顺便说一句。

好的,我正在从数据库中获取地图的多边形(边界),并希望直接减少通话中的点数。 很好,SqlServer实际上具有内置的空间功能“ Reduce”。

这是我的代码:

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

太好了,一切正常,直到它真正达到了reduce函数。 mehmehmehm:引发不支持的异常。

好吧,我深入研究了一下,实际上遇到了这个参考资料:

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

看起来甚至没有实现:

/// <summary>
        /// Proxy for the function SqlServer.REDUCE
        /// </summary>
        [EdmFunction("SqlServer", "REDUCE")]
        public static System.Data.Spatial.DbGeography Reduce(System.Data.Spatial.DbGeography geographyValue, System.Double? tolerance)
        {
            throw EntityUtil.NotSupported(System.Data.Entity.Strings.ELinq_EdmFunctionDirectCall);
        }

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

我认为目前没有其他选择,还是存在?

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

例如

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

请访问www.asp.net了解更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM