2013-07-14 2 views
3

Я пытаюсь сохранить тип точки в Postgresql Я пробовал этот путь. (Db определение таблицы Model)Сохранить NpgsqlPoint (точка Postgresql) с платформой Entity

public NpgsqlPoint Position { get; set; } 

Я установил объект с помощью этого метода

posData.Position = new NpgsqlPoint (34.3244,23.2344); 

Но когда я называю .SaveChanges на DbContext я получаю исключение из не Null Нарушения ограничения, поэтому я предположим, что EF пытается вставить нуль.

Я отладил posData.Position перед входом, и объект содержит правильные данные.

Я искал google, но я не нашел ни одного примера или кого-то, у кого была такая же проблема.

Какие-либо подсказки?

ответ

1

Update:

Полный Native PostGIS для Npgsql является shceduled быть выпущен с версией 3.1. Цитата npgsql.org version 3 release notes.

Основные цели для Npgsql 3.1 включает в себя: Full, встроенную поддержку PostGIS (# 529)

А для тех, кто хочет идти в ногу с изменениями. Here is the feature branch conversation. Поддержка 2D PostGIS уже слита по умолчанию.

Для версии Npgsql 2.x вот мой старый ответ.

Я ответил на вопрос в форуме разработки Npgsql и получил свой ответ.

Тип NpgSqlPoint еще не поддерживается EF из-за Entity Framework Тип данных Ограничение.

Кажется, что они все еще работают над этим.

1

Похоже, NpgsqlPoint делает PostgreSQL point type. Это не то же, что и POINT geometry type, используемое PostGIS Extension (например, geometry(Point, 4326)).

Чтобы сделать PostGIS geometry, вам необходимо x, y и srid (пространственный эталонный идентификатор, например, см http://spatialreference.org/). Они могут использоваться с конструктором геометрии ST_MakePoint и ST_SetSRID для установления пространственной привязки. Например, здесь приведена параметризованная команда:

SELECT ST_SetSRID(ST_MakePoint(:long:, :lat:), 4326) 

, который принимает координату WGS84 (SRID = 4326).

+0

Да, я на самом деле пытаюсь вставить обычный «пост» тип postgres. Когда я делаю переменную «String» и передаю «12.5454,41.1215», например, точка успешно сохраняется.Но тогда у меня проблема с чтением точки как строки из Entity Framework, которая возвращает только имя класса как значение. –

+0

Хорошо, тег 'postgis' предложил использовать PostGIS. –