Сопоставление геометрии с помощью EF Core 2.2, Npgsql и NetTopologySuite

Я пытаюсь сопоставить этот класс:

using NetTopologySuite.Geometries;
using System.Collections.Generic;

namespace Project.API.Models
{
    public class Geo
    {
        public int Id { get; set; }
        public IEnumerable<Geometry> Geometries{ get; set; }
    }
}

Но когда я пытаюсь добавить новую миграцию, у меня возникает эта ошибка:

Свойство "Geometry.UserData" не может быть сопоставлено, поскольку оно имеет тип "объект", который не является поддерживаемым примитивным типом или допустимым типом объекта...

Провожу исследование (https://www.npgsql.org/efcore/mapping/nts.html) я обнаружил, что мне нужно использовать:

services.AddDbContext<DataContext>(x => x.UseNpgsql(Configuration.GetConnectionString("DefaultConnection"), o => o.UseNetTopologySuite()));

вместо

services.AddDbContext<DataContext>(x => x.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));

Но при добавлении o => o.UseNetTopologySuite() у меня возникает ошибка:

«NpgsqlDbContextOptionsBuilder» не содержит определения для «UseNetTopologySuite».

Я думаю, что это связано с проблемами версии, но версии, которые я использую, точно такие, как предложено в этом выпуске на github (https://github.com/npgsql/efcore.pg/issues/1024).

NuGet:

введите здесь описание изображения


person Raul    schedule 19.12.2019    source источник


Ответы (1)


Как сказано в документации, вам необходимо ссылаться на Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite. Также обратите внимание, что если вы используете EF Core 2.2, вам придется использовать NetTopologySuite 1.15.x, а не 2.0.0; последний будет работать только с EF Core 3.0/3.1.

person Shay Rojansky    schedule 19.12.2019
comment
Я использовал NetTopologySuite 1.15.x, но не мог сослаться на класс Coordinate. Похоже, это доступно только в 2.0.0. Я могу сделать что-то очень глупое, это моя первая попытка в NetTopologySuite. Я пытаюсь создать многоугольник, и для этого мне нужно передать массив координат. - person Raul; 19.12.2019
comment
Где вы, возможно, пропустили использование для использования пространства имен GeoAPI.Geometries? Взгляните на примеры NetTopologySuite /а>. Если вы все еще сталкиваетесь с проблемами, вы можете открыть другой вопрос с полной информацией. - person Shay Rojansky; 27.12.2019