C# 是否可以使用实体框架在唯一性键约束中使用NetTopologySuite点?

C# 是否可以使用实体框架在唯一性键约束中使用NetTopologySuite点?,c#,entity-framework,entity-framework-core,nettopologysuite,C#,Entity Framework,Entity Framework Core,Nettopologysuite,我正在使用.net core和实体框架core与NetTopologySuite.core和Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite构建一个API 我有一个用例,我想存储一组地理位置,这些地理位置一起构成一个网络。我希望有多个网络,因此我还添加了一个表示不同网络的NetId Location属性的类型为NetTopologySuite.Geometrics.Point 为了确保相同的点不会在同一个网络中被添加两次,我想使用点

我正在使用.net core和实体框架core与
NetTopologySuite.core
Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite
构建一个API

我有一个用例,我想存储一组地理位置,这些地理位置一起构成一个网络。我希望有多个网络,因此我还添加了一个表示不同网络的
NetId

Location
属性的类型为
NetTopologySuite.Geometrics.Point

为了确保相同的
不会在同一个网络中被添加两次,我想使用
NetId
的组合作为唯一的键约束

我试着这样做:

modelBuilder.Entity<NetLocation>().HasIndex(m => new { m.NetId, m.Point}).IsUnique();

如何确保完全相同的位置不会两次添加到同一网络?

使用SQL Server,可以添加计算列PointLat=“Point.Lat”和PointLong=“Point.Long”,然后在索引中使用它们

modelBuilder.Entity<NetLocation>().HasIndex(m => new { m.NetId, m.PointLat, m.PointLong }).IsUnique();
modelBuilder.Entity().HasIndex(m=>new{m.NetId,m.PointLat,m.PointLong}).IsUnique();

应该有效,但未经测试。不知道其他提供商的情况,但他们可能有类似的
地理
支持。

为什么不检查给定NetId是否存在点,然后进行插入?该点映射到sql server上的特殊空间列类型(地理),并且只能在其上创建特殊的空间索引。据我所知,EF不支持空间索引(它们的创建与常规索引的语法不同),而且-无论如何都不能在多个列上创建空间索引(更不用说其中一个列不是空间的)。
modelBuilder.Entity<NetLocation>().HasIndex(m => new { m.NetId, m.PointLat, m.PointLong }).IsUnique();