NetTopologySuite / NetTopologySuite.IO.SqlServerBytes

A SQL Server IO module for NTS which works directly with the serialization format
BSD 3-Clause "New" or "Revised" License
16 stars 12 forks source link

Code-first spatial index creation #26

Open jamesra opened 2 years ago

jamesra commented 2 years ago

I am getting this error creating my database from scratch in a unit test:

Microsoft.Data.SqlClient.SqlException: 'Column 'MosaicShape' in table 'Location' is of a type that is invalid for use as a key column in an index or statistics.'

This is a simplified version of the class. It was reverse-engineered by EF Core Power Tools.

[Table("Location")]
[Index(nameof(MosaicShape), Name = "MosaicShape_Index")]
class Location{

 [Key]
 [Column("ID")]
 public long Id { get; set; }

 [Required]
 [Column(TypeName = "geometry")]
 public Geometry MosaicShape { get; set; }
} 

In a unit test I attempt to create this database from scratch. The error occurs at DataContext.Database.EnsureCreated();

public CreateDropDatabaseFixture(IConfiguration configuration, ILogger log = null)
{
    var connStringTemplate = configuration.GetConnectionString("AnnotationConnection");

    DatabaseName = RandomLetters(6);
    var connString = string.Format(connStringTemplate, DatabaseName);

    DbContextOptionsBuilder<AnnotationContext> builder = new DbContextOptionsBuilder<AnnotationContext>();
    builder = builder.UseSqlServer(connString, config => config.UseNetTopologySuite()).EnableDetailedErrors().EnableSensitiveDataLogging();
    DataContext = new AnnotationContext(builder.Options, log);

    DataContext.Database.EnsureCreated();
}

This previous issue indicates a spatial index should be possible. https://github.com/dotnet/efcore/issues/12538

I also tried removing the [Index] attribute from the class and creating it with the builder:

entity.HasIndex(e => e.MosaicShape, "MosaicShape_Index");

The error was the same, as expected.

airbreather commented 2 years ago

Microsoft.Data.SqlClient.SqlException: 'Column 'MosaicShape' in table 'Location' is of a type that is invalid for use as a key column in an index or statistics.'

This error looks significantly different from what's in this issue's title. Can you please update one or the other, or add details about how the Geometry.UserData error fits into it?

jamesra commented 2 years ago

Sorry about that. I had another issue I solved before filing this one. I also mis-keyed and submitted this a bit early, but I'm still struggling with it so I left it submitted.

bricelam commented 2 years ago

Are you looking for https://github.com/dotnet/efcore/issues/12538?

jamesra commented 2 years ago

Yes, apparently I am.