2

我正在使用 .net 核心和实体框架核心和 .net 构建一个NetTopologySuite.CoreAPI Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite

我有一个用例,我想存储一组共同构建网络的地理位置。我想有多个网络,所以我还添加了一个NetId代表不同网络的。

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

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

我试图这样做:

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

启动我的应用程序时,我收到此错误:

Column 'Location' in table 'MyTable' is of a type that is invalid for use as a key column in an index or statistics.

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

4

1 回答 1

0

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

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

应该可以工作,但未经测试。不知道其他提供商,但他们可能有类似的geography支持。

于 2020-11-24T13:30:15.360 回答