C# EF Core 2.2空间型can';不能添加到数据库迁移中
我正在尝试使用EF core 2.2构建一个带有空间对象的数据库,但在尝试创建数据库迁移时遇到了问题。具体而言,使用:C# EF Core 2.2空间型can';不能添加到数据库迁移中,c#,entity-framework,spatial,ef-core-2.2,C#,Entity Framework,Spatial,Ef Core 2.2,我正在尝试使用EF core 2.2构建一个带有空间对象的数据库,但在尝试创建数据库迁移时遇到了问题。具体而言,使用: class Country { public int CountryID { get; set; } public string CountryName { get; set; } // Database includes both Polygon and MultiPolygon values public IGeometry Border
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”属于接口类型(“IGometry”)。
如果是导航属性,请手动配置的关系
将该属性强制转换为映射的实体类型,否则忽略
使用NotMappeAttribute或
“OnModelCreating”中的“EntityTypeBuilder.Ignore”
类似地,如果将其改为几何体类型,则会得到:
无法映射属性“Geometry.UserData”,因为它是
类型“object”,它不是受支持的基元类型或有效的
实体类型。可以显式映射此属性,也可以使用
“[NotMapped]”属性,或在中使用“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);
}
}
公共类MyDBContextFactory:IDesignTimeDbContextFactory
{
公共MyDBContext CreateDbContext(字符串[]args)
{
var builder=new DbContextOptionsBuilder();
builder.UseSqlServer(cnnString,x=>x.UseNetTopologySuite());
返回新的MyDBContext(builder.Options);
}
}
但我得到了一个错误:
“SqlServerDbContextOptionsBuilder”不包含的定义
“UseNetTopologySuite”和无可访问的扩展方法
“UseNetTopologySuite”接受类型为的第一个参数
找不到“SqlServerDbContextOptionsBuilder”(是否缺少
使用指令或程序集引用?)
即使我已经安装了nuget软件包
StartUp.ConfigureServices()
)。只需在选项中添加,x=>x.UseNetTopologySuite()
。使用SQLServer
括号
看起来是这样的:
services.AddDbContext<ManagerContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection"),
x => x.UseNetTopologySuite()
)
);
services.AddDbContext(选项=>
options.UseSqlServer(
Configuration.GetConnectionString(“DefaultConnection”),
x=>x.UseNetTopologySuite()
)
);
我不必使用将添加到文件中,因为我已经引用了,仅供参考,如果您需要,它将是Microsoft.EntityFrameworkCore
如果在安装NuGet软件包后仍出现引用错误,请转到管理NuGet软件包,检查它是否在已安装列表中,是否干净&重建解决方案并重新启动visual studio,这可能会有所帮助。这与我上面提供的链接相同,这让我意识到了这一点,但它不起作用。我有builder.UseSqlServer(cnnString,x=>x.UseNetTopologySuite()),但我听说它找不到那个参考资料。是的,我已经添加了nuget软件包是的,谢谢你的关注,但我已经完成了所有这些。您的编辑假设我使用的dbContext与您相同,而我不是。我有一个从idesigntimedbcontextfactory继承的类,比如:公共类MyDBContextFactory:idesigntimedbcontextfactory。在这里,我使用CreateDBContext方法。它应该是一样的,但看起来不一样。看我编辑的问题啊,我的错,你是对的。我的重点是安装软件包NetTopologySuite,而不是您上面提到的EFCore。我只想为其他人添加一个,您还需要根据您使用的EF Core版本安装正确版本的软件包。另外请注意:如果您使用的是design factory模式,则需要添加“UseNetTopologySuite()”“还有。