Предотвращение включения теневого свойства в запросы - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь использовать PostGIS с EF Core 2.1. Учитывая, что EF Core пока не поддерживает пространственные данные, мой подход заключается в том, чтобы при вставке строки был установлен столбец geometry, который устанавливается функцией триггера, и я использовал бы этот столбец в своих запросах с предложением FromSql, поэтому это свойство вообще отсутствует в моей организации.

Я объявил столбец как теневое свойство следующим образом: modelBuilder.Entity<MyEntity>().Property<byte[]>("LocationBlob").HasColumnType("geometry");, и он правильно создан во время миграции. Моя проблема в том, что каждый раз, когда я запрашиваю эту таблицу, сгенерированный SQL SELECT s этот столбец, что приводит к ошибке The field 'LocationBlob' has type 'public.geometry', which is currently unknown to Npgsql.

Мне на самом деле не нужно извлекать это свойство, поэтому есть ли способ запретить EF (или провайдеру Postgres) включать теневые свойства в запросы?

1 Ответ

0 голосов
/ 02 мая 2018

EF Core 2.1 (который в настоящее время все еще находится в режиме предварительного просмотра) будет полностью поддерживать пространственные данные - текущая ситуация, когда не хватает поддержки, носит временный характер, поэтому нет необходимости настраивать какие-либо специальные приемы.

Фактически, улучшенная пространственная поддержка будет одной из основных областей улучшения. Пространственная поддержка до 2.1 (через встроенные типы, такие как PostgisPoint) будет возвращена через плагин, но кроме того, типы PostGIS будут также поддерживаться через пространственную библиотеку NetTopologySuite .NET, даже обеспечивая поддержку для перевода основного пространственного операции в SQL. Таким образом, запрос LINQ, вызывающий NetTopologySuite x.Covers(y), будет переведен в PostGIS ST_Covers(x, y).

.

Что касается вашего конкретного обходного пути (что опять-таки не должно быть сделано), текущая проблема заключается в том, что слой ADO.NET (не EF Core) в Npgsql не обрабатывает тип данных PostGIS geometry, так как поддержка исключена к внешнему плагину. Это означает, что на данный момент нет способа ни читать, ни писать geometry, как байт [] или что-либо еще.

Если для вас важен пространственный режим, я бы порекомендовал продолжить работу с EF Core 2.0 и Npgsql 3.2.7 до тех пор, пока не выйдет 2.1.0-rc1, и в этот момент поддержка должна быть.

...