如何在EF 7的asp.net vnext中使用空间数据类型?

时间:2014-11-19 03:48:58

标签: asp.net-mvc entity-framework spatial asp.net-core

vnext 中,使用Entity Framework 7(https://github.com/aspnet/EntityFramework)如何在模型(代码优先方法)中使用空间数据类型(例如DbGeography)来保存点,为表创建模型时的形状等。

e.g。

public DbGeography gps_points {get; set;}

我无法使用DbGeography


更新

确认,此功能尚未在EF7中提供,但可能在将来的版本中提供。

跟踪任何更改,请参阅:

https://github.com/aspnet/EntityFramework/issues/242

https://github.com/aspnet/EntityFramework/issues/1100

3 个答案:

答案 0 :(得分:2)

在实体框架的github存储库中引用your own issue,似乎还没有实现。由于里程碑设置为“Backlog”,似乎这个问题在不久的将来不会得到解决。

如果您不需要在数据库端按地理位置处理数据(例如,在边界框或交叉点中搜索),则可以将数据保存为Well-known text。如果EF7将来支持空间数据,则可以轻松地将其转换为数据库几何类型。

请注意数据库的字符串长度限制,因为对于复杂的形状,WKT可以保持安静。

答案 1 :(得分:0)

您需要添加对System.Data.Entity.Spatial的引用。我不认为它现在默认包含在EF参考中,因此你不能使用DbGeography。

请记住,一切都是即插即用的!

答案 2 :(得分:0)

EF5中引入了对空间类型的支持。但是,在EF5中,仅当应用程序以.NET 4.5为目标并运行时才支持空间类型。

以针对.NET 4和.NET 4.5的应用程序支持以EF6空间类型开头。

Microsoft SQL Server提供程序依赖于可能需要安装的一些其他低级库。

使用Microsoft SQL Server的空间类型的先决条件

SQL Server空间支持取决于低级别的SQL Server特定类型SqlGeographySqlGeometry。这些类型存在于Microsoft.SqlServer.Types.dll程序集中,并且此程序集不作为EF的一部分或作为.NET Framework的一部分提供。

安装Visual Studio时,它通常还会安装一个版本的SQL Server,这将包括安装Microsoft.SqlServer.Types.dll

如果未在要使用空间类型的计算机上安装SQL Server,或者从SQL Server安装中排除了空间类型,则需要手动安装它们。这些类型包含在SQL Server功能包中,并且SQL Server 2008和SQL Server 2012存在不同的程序集。