如何使用空间数据进行EF Core 2.2迁移?

时间:2018-12-05 16:19:23

标签: entity-framework .net-core ef-core-2.2

我正在尝试在Entity Framework Core 2.2中进行迁移,但遇到了一些奇怪的错误。should work是因为文档中没有提到任何有关映射代码的内容。

此命令:

dotnet ef迁移添加InitialCreate

导致此错误:

属性“ Point.Boundary”具有接口类型(“ IGeometry”)。如果它是导航属性,则通过将其强制转换为映射的实体类型来手动配置此属性的关系,否则,请使用“ OnModelCreating”中的NotMappedAttribute或“ EntityTypeBuilder.Ignore”忽略该属性。

我不明白。我有一个实体,一个上下文和所有必需的依赖项,包括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 :(得分:2)

基本上,您共享的链接是仅介绍新功能的博客。在每个主题的结尾,您将找到一个LBYL。似乎该套件需要一个额外的库,具体取决于您所使用的数据库。

根据本文档,您需要根据您的数据库添加相应的 Spatial NuGet软件包。 (请检查 install 部分。例如,如果您使用的是SQL Server,请添加Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite软件包。完成后,请在启动类的AddDbContext函数中,您可以使用类似config.UseSqlServer("", x => x.UseNetTopologySuite())的东西。