簡體   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