Как выполнить миграцию с EF Core 2.2 с использованием пространственных данных? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь выполнить миграцию в Entity Framework Core 2.2, но получаю некоторые странные ошибки. Это должно работать , поскольку в документации ничего не говорится о коде сопоставления или около того.

Этокоманда:

dotnet ef migrations add InitialCreate

приводит к этой ошибке:

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

Iне понимаю это.У меня есть сущность, контекст и все необходимые зависимости, включая EF Core 2.2.Как мне это решить?

Файл проекта:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    <DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.0" />
    <PackageReference Include="NetTopologySuite" Version="1.15.1" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="4.0.1" />
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.0.2105168" />
  </ItemGroup>

Файл модели

using System.ComponentModel.DataAnnotations;
using NetTopologySuite.Geometries;

namespace WebApplication1.Models
{
    public class Item
    {
        public int Id { get; set; }

        [Required]
        public string Name { get; set; }

        [Required]
        public Point Location { get; set; }
    }
}

Файл контекста

using System;
using Microsoft.EntityFrameworkCore;
using WebApplication1.Models;

namespace WebApplication1
{
    public class ItemContext : DbContext
    {
        public ItemContext(DbContextOptions<ItemContext> options) : base(options)
        {
            Console.WriteLine("Context created");
        }

        public DbSet<Item> Items { get; set; }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            Console.WriteLine("OnModelCreating");
        }
    }
}

Консоль: enter image description here

1 Ответ

0 голосов
/ 06 декабря 2018

По сути, вы поделились ссылкой на блог, в котором представлены только новые функции.В конце каждой темы вы найдете ссылку на всю документацию .Похоже, что для этого набора требуется дополнительная библиотека, в зависимости от используемой вами базы данных.

В соответствии с этой документацией вам необходимо добавить соответствующий Spatial NuGet Package в зависимости от того, какая у вас база данных.(проверьте раздел install . Например, добавьте пакет Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite, если вы используете SQL-сервер. Как только это будет сделано, в вашем классе запуска, в вашей функции AddDbContext, вы можете использовать что-то вродеэто config.UseSqlServer("", x => x.UseNetTopologySuite()).

...