问题描述
我正在尝试使用EF core 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.Borde’属于接口类型(‘IGeometry’)。 如果它是导航属性,则手动配置 通过将此属性强制转换为映射的实体类型,否则忽略 使用NotMappdAttribute的属性或 "OnModelCreating"中的"EntityTypeBuilder.Ignore"。
同样,如果我将其更改为几何图形类型,则会得到:
无法映射属性‘Geometry.UserData’,因为它是 不是受支持的基元类型或不是有效的 实体类型。显式映射此属性,或使用 "[NotMaps]"属性,或使用中的"EntityTypeBuilder.Ignore" "OnModelCreating"。
我不知道我的对象是点、直线还是多边形,所以它必须是泛型的。我如何在我的结构中表现这一点?此外,我还看到一些地方说我需要添加以下代码:
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",没有可访问的扩展方法 "UseNetTopologySuite"接受类型为 找不到"SqlServerDbContextOptionsBuilder"(是否缺少 使用指令还是程序集引用?)
即使我安装了Nuget包
推荐答案
- 在您正在使用的数据库上安装相关的NetTopologySuite包depends,例如您使用的是SQLServer,因此需要安装此NuGet包:
Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite 2)配置您的数据库使用NetTopologySuite(需要编辑的代码通常在
StartUp.ConfigureServices()
中)。只需在options.UseSqlServer
括号内添加, x => x.UseNetTopologySuite()
如下所示:
services.AddDbContext<ManagerContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection"),
x => x.UseNetTopologySuite()
)
);
我不必向文件添加using
,因为我已经引用了,仅供参考,如果您需要,它将是Microsoft.EntityFrameworkCore
。
如果您在安装NuGet程序包后仍收到引用错误,请转到管理NuGet程序包并检查它是否在已安装列表中,如果它在已安装列表中,则重新生成您的解决方案并重新启动Visual Studio。这可能会有所帮助。
这篇关于EF Core 2.2空间类型不能添加到数据库迁移的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!