如何解决没有适合实体类型'LineString'的构造函数
尝试将集成测试从内存数据库迁移到PostGIS,当我调用EnsureDeleted
或EnsureCreated
方法时,总是会遇到该异常:
System.InvalidOperationException
No suitable constructor found for entity type 'LineString'. The following constructors had parameters that could not be bound to properties of the entity type: cannot bind 'points' in 'LineString(Coordinate[] points)'; cannot bind 'points','factory' in 'LineString(CoordinateSequence points,GeometryFactory factory)'.
通过内存中的测试,一切正常。
唯一具有空间数据的模型是:
public class SurveilledArea
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
[Column(TypeName = "geometry (polygon)")]
public Polygon Polygon { get; set; }
public string AvigilonAlertId { get; set; }
public int MunicipalityId { get; set; }
public virtual Municipality Municipality { get; set; }
}
我的DbContext是这个
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> dbContextOptions) : base(dbContextOptions)
{
}
public virtual DbSet<SurveilledArea> Areas { get; set; }
public virtual DbSet<Municipality> Municipalities { get; set; }
public virtual DbSet<Report> Reports { get; set; }
public virtual DbSet<Device> Devices { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasPostgresExtension("postgis");
modelBuilder.Entity<SurveilledArea>()
.HasOne(p => p.Municipality)
.WithMany(p => p.SurveilledAreas)
.HasForeignKey(p => p.MunicipalityId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<Report>()
.HasOne(p => p.Device)
.WithMany(p => p.Reports)
.HasForeignKey(p => new { p.DeviceType,p.DeviceAdId })
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<Municipality>()
.HasIndex(p => p.ShortCode)
.IsUnique();
modelBuilder.Entity<Device>()
.HasKey(device => new {device.Type,device.AdvertisingId});
base.OnModelCreating(modelBuilder);
}
}
我在做什么错了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。