Пространственный тип EF Core 2.2 нельзя добавить в миграцию базы данных - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь построить базу данных с пространственным объектом, используя EF core 2.2, и у меня возникает проблема с попыткой создания миграций базы данных.используя https://docs.microsoft.com/en-us/ef/core/modeling/spatial, а именно:

class Country
{
    public int CountryID { get; set; }

    public string CountryName { get; set; }

    // Database includes both Polygon and MultiPolygon values
    public IGeometry Border { get; set; }
}

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

Свойство 'Country.Border'имеет тип интерфейса («IGeometry»).Если это свойство навигации, вручную настройте отношение для этого свойства, приведя его к сопоставленному типу сущности, в противном случае игнорируйте свойство, используя NotMappedAttribute или 'EntityTypeBuilder.Ignore' в 'OnModelCreating'.

аналогичноесли вместо этого изменить его на тип Geometry, я получу:

Свойство 'Geometry.UserData' не может быть отображено, поскольку оно имеет тип 'object', который не поддерживается примитивным типом илидопустимый тип объекта.Либо явным образом сопоставьте это свойство, либо проигнорируйте его, используя атрибут «[NotMapped]» или «EntityTypeBuilder.Ignore» в «OnModelCreating».

Я не знаю заранее, если мой объектбудет точка, линия или многоугольник, поэтому он должен быть общим.как мне представить это в моей структуре?Кроме того, я видел, как в некоторых местах мне нужно добавить следующий код:

public class MyDBContextFactory : IDesignTimeDbContextFactory<MyDBContext>
    {

        public MyDBContext CreateDbContext(string[] args)
        {
            var builder = new DbContextOptionsBuilder<MyDBContext>();
            builder.UseSqlServer(cnnString, x => x.UseNetTopologySuite());
            return new MyDBContext(builder.Options);
        }
   }

, но я получаю сообщение об ошибке:

'SqlServerDbContextOptionsBuilder' не содержит определения для 'UseNetTopologySuite »и нет доступного метода расширения« UseNetTopologySuite », принимающего первый аргумент типа« SqlServerDbContextOptionsBuilder »(вы пропустили директиву using или ссылку на сборку?)

, хотя у меня есть nugetпакет установлен

1 Ответ

0 голосов
/ 20 февраля 2019

Да, вам нужен этот UseNetTopologySuite, но он не отображается, потому что вам нужно установить пакет, ссылающийся на ваш сервер базы данных, в вашем случае вы используете SqlServer, поэтому

Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite

Я просто настроил его так,

services.AddDbContext<ManagerContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),x=> x.UseNetTopologySuite()));

и я не получаю сообщение об ошибке, если вы не найдете ссылку даже после установки пакета nugget, перейдите в раздел «Управление пакетом Nugget» и проверьте, есть ли он на установленных пакетах, и является ли он «Очистить ваше решение», затем перестройтеваше решение и перезапустите visual studio, это может помочь.

...