【问题标题】:Mapping geometries with EF Core 2.2, Npgsql and NetTopologySuite使用 EF Core 2.2、Npgsql 和 NetTopologySuite 映射几何图形
【发布时间】:2020-04-11 16:28:28
【问题描述】:

我正在尝试映射此类:

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&lt;DataContext&gt;(x =&gt; x.UseNpgsql(Configuration.GetConnectionString("DefaultConnection"), o =&gt; o.UseNetTopologySuite()));

而不是

services.AddDbContext&lt;DataContext&gt;(x =&gt; x.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));

但是添加o =&gt; o.UseNetTopologySuite()我有错误:

“NpgsqlDbContextOptionsBuilder”不包含“UseNetTopologySuite”的定义

我认为这与版本问题有关,但我使用的版本与 github (https://github.com/npgsql/efcore.pg/issues/1024) 上此问题中建议的版本完全相同。

NuGet:

【问题讨论】:

    标签: c# .net-core entity-framework-core npgsql nettopologysuite


    【解决方案1】:

    As the documentation says,需要引用Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite包。另请注意,如果您使用 EF Core 2.2,则必须使用 NetTopologySuite 1.15.x 而不是 2.0.0;后者仅适用于 EF Core 3.0/3.1。

    【讨论】:

    • 我使用的是 NetTopologySuite 1.15.x,但我无法引用 Coordinate 类。看起来它仅在 2.0.0 可用。我可能会做一些非常愚蠢的事情,这是我在 NetTopologySuite 的第一次尝试。我正在尝试创建一个多边形,为此我需要传递坐标数组。
    • 您在哪里可能缺少 using GeoAPI.Geometries 命名空间的使用?看看the NetTopologySuite samples。如果您仍然遇到问题,您可以使用完整信息打开另一个问题。
    猜你喜欢
    • 2021-12-26
    • 2015-01-13
    • 1970-01-01
    • 2021-05-01
    • 2021-02-20
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多