【问题标题】:Entity Framework: SqlGeography vs DbGeography实体框架:SqlGeography 与 DbGeography
【发布时间】:2014-04-20 19:45:41
【问题描述】:

这两个对象在 Microsoft SQL 数据库中表示相同的地理数据类型有什么区别或预期用途?

System.Data.Entity.Spatial.DbGeography

Microsoft.SqlServer.Types.SqlGeography

它们不能相互转换,但SqlGeography 在创建点、多边形等方面有额外的命令。

我认为System.Data.Entity 仅用于实体框架,而Microsoft.SqlServer 用于直接使用SqlCommand 时使用?

【问题讨论】:

    标签: c# sql-server entity-framework spatial


    【解决方案1】:

    你是对的,本质上就是这么简单。 DbGeography 只是 SqlGeography 的简化版本,旨在在 Entity Framework 内工作。最流行的 SqlGeography 方法已在其中实现,但正如您正确指出的那样,并非全部。

    虽然这两种类型不能直接相互转换,但在需要 SqlGeography 的附加功能时,转换它们的过程相对简单。

    例如:

    SqlGeography geog1 = SqlGeography.STPolyFromText('<coords>', srid);
    SqlGeography geog2;
    DbGeography dbGeog;
    
    // SqlGeography to DbGeography
    dbGeog = DbGeography.FromText(geog1.ToString(), srid);
    // DbGeography to SqlGeography
    geog2 = SqlGeography.Parse(dbGeog.AsText());
    

    【讨论】:

    • 这是一个很好的解决方法:在两种类型之间进行互换。也许将来这些类型会变得更加兼容或功能齐全,因为 SqlGeography 作为一些有用的功能。
    • @simbolo,它会,但我也会得到他们不这样做的原因,通过将存储过程映射到 EF 或简单地通过 ADO 访问,可以在 SQL 中本地使用任何其他东西。跨度>
    • 使用文本 (WKT) 在这些类型之间进行转换效率极低,理想情况下应基于众所周知的二进制格式进行转换,请参阅stackoverflow.com/a/29200641/472149 示例。
    • @SergeBelov 当我们谈论个位数毫秒并且性能取决于平台时,将差异定义为“极其低效”可能有点苛刻。尽管如此,我同意它更快,并且我自己使用二进制方法已有一段时间了。感谢您花时间更新主题。
    • 我是否遗漏了某处的引用或使用某些扩展方法。 AsText() 不存在于 SqlGeography
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2017-07-07
    • 2010-10-30
    相关资源
    最近更新 更多