.NET 4.6/Entity Framework: бросок пространственных функций не поддерживается

Это может быть далеко, и я думаю, что у меня уже есть ответ, однако я хочу посмотреть, решил ли кто-то это по-другому. Кстати, используя Entity Framework.

Хорошо, я получаю полигоны из базы данных для карты (границы) и хочу уменьшить количество точек прямо в вызове. Отлично, SqlServer на самом деле имеет встроенную пространственную функцию «Уменьшить».

Вот мой код:

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

Отлично, работает все хорошо, пока не наткнется на функцию сокращения. mehmehmehm: Выдает исключение Unsupported.

Ну, я копнул немного глубже и наткнулся на эту ссылку:

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 с использованием Entity Framework?

Я не думаю, что есть какой-либо другой вариант на данный момент, или есть?


person flyandi    schedule 01.09.2015    source источник


Ответы (1)


Существует экземпляр базы данных как свойство DbContext. Вы можете использовать метод SqlQuery класса базы данных для выдачи необработанного SQL.

Например

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

Взгляните на www.asp.net для получения дополнительной информации.

person Zeljko Vujaklija    schedule 02.09.2015