【发布时间】:2013-08-11 07:42:53
【问题描述】:
我正在尝试在 SQL Server 2008 R2 中使用 sys.geography 类型。我想将此地理类型用于基于位置的查询。例如,我将位置(作为经度和纬度变量)传递给存储过程并返回附近的任何记录。
问题是实体框架不支持地理类型,所以我不能直接从 c# 设置这个值。
我通过在同一个表中创建 LocationLatitude 和 LocationLongitude 列解决了这个问题。我使用实体框架中的 LocationLatitude 和 LocationLongitude 列,并使用数据库存储过程中的地理类型“Location”列。
据我所知,有三种方法可以从这两个字段中导出地理“位置”列。
- 将“位置”设为计算列
- 创建一个返回表格内容 + 计算位置的视图
- 在表上创建数据触发器。这会在每次更新 LocationLongitude 或 LocationLatitude 列时计算地理值并填充 Location 列。
我想知道哪个在性能方面会更好。我认为#1将是最糟糕的,所以我认为这是#2和#3之间的折腾。
我目前正在使用#3(数据触发器),但我知道通常最好避免使用数据触发器。这意味着从这个角度来看,#2(视图)将是最好的,但是......我担心使用#2可能是一件非常愚蠢的事情,出于某种原因。 Stack Overflow 是检查这一点的最佳场所!
Soo...我应该使用#1、#2、#3 还是其他方法?
【问题讨论】:
-
我会挑战你的假设,即 #1 将是“最差”的 - 你认为这会使 #1 与 #2 有什么不同?
-
我认为 EF5 支持地理数据类型。这是一个选择吗?
-
@Damien_The_Unbeliever 我认为每次查询表时都必须重新计算地理位置会很糟糕。通过拥有一个单独的视图,您只会在存储过程中调用它
-
@podiluska 嗯,可能吗?意味着我将不得不迁移到 .NET 4.5 和 Visual Studio 2012。无论如何,也许值得去做。
-
@podiluska 您能否将您的评论移到答案中以便我接受?
标签: sql-server sql-server-2008 entity-framework sqlgeography