C# EF Core 2.2空间型can';不能添加到数据库迁移中

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

我正在尝试使用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 { 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软件包

  • 安装相关的NetTopologySuite软件包,将其安装在您正在使用的数据库上,例如,您正在使用SqlServer,因此需要安装此NuGet软件包:
  • Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite 2) 将数据库配置为使用NetTopologySuite(要编辑的代码通常位于
    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()”“还有。