我正在尝试使用 EF 核心 2.2 构建具有空间对象的数据库,但在尝试创建数据库迁移时遇到了问题。使用https://docs.microsoft.com/en-us/ef/core/modeling/spatial,特别是:
class Country
{
public int CountryID { get; set; }
public string CountryName { get; set; }
// Database includes both Polygon and MultiPolygon values
public IGeometry Border { get; set; }
}
如果我尝试使用它创建迁移,则会收到以下错误:
属性“Country.Border”属于接口类型(“IGeometry”)。如果它是导航属性,则通过将其转换为映射的实体类型手动配置此属性的关系,否则使用“OnModelCreating”中的 NotMappedAttribute 或“EntityTypeBuilder.Ignore”忽略该属性。
同样,如果我将其更改为 Geometry 类型,我会得到:
无法映射属性“Geometry.UserData”,因为它属于“对象”类型,不是受支持的原始类型或有效的实体类型。显式映射此属性,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略它。
我不提前知道我的对象是点还是线还是多边形,所以它必须是通用的。我如何在我的结构中表示它?另外我看到一些地方说我需要添加以下代码:
public class MyDBContextFactory : IDesignTimeDbContextFactory<MyDBContext>
{
public MyDBContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<MyDBContext>();
builder.UseSqlServer(cnnString, x => x.UseNetTopologySuite());
return new MyDBContext(builder.Options);
}
}
但我得到了错误:
“SqlServerDbContextOptionsBuilder”不包含“UseNetTopologySuite”的定义,并且找不到接受“SqlServerDbContextOptionsBuilder”类型的第一个参数的可访问扩展方法“UseNetTopologySuite”(您是否缺少 using 指令或程序集引用?)
即使我安装了 nuget 包