空间数据类型LINQ2SQL或EF4支持(Spatial data types support in

2019-07-03 10:54发布

有谁知道(理想情况下,与基准),LinqToSQL或V4的EntityFramework的VS2010版本是否支持在SQL 2008空间数据类型的查询?

Answer 1:

在EF 4.0你也许可以使用组合砍东西一起定制功能和假装的空间类型是真正的二进制类型。 这是什么,我想周围碴和尝试,并平添了我的秘诀系列 。 但目前还连劈是未经证实的。 :(

至于直接支持,遗憾的是没有L2S或EF V4将支持在VS2010的时间内空间类型。

亚历克斯·詹姆斯

实体框架项目经理。



Answer 2:

这里有一个解决办法得到它在实体框架/ LINQ合作实体:

您可以使用数据库视图返回知名的文本(使用“geometry.ToString()”中的查询)或二进制。 然后,一旦生成的行返回,只是字符串/二进制转换成SqlGeometry对象.NET。

下面是用于构建一种观点认为,几何型的“位置”字段转换为一个知名的文本字符串查询示例:

SELECT ID, Name, Location.ToString() as Location FROM MyTable

下面是查询产生的实体有一个包含“地理”对象的知名文本或字符串表示的“位置”栏的一个例子:

var e = new MyApp.Data.MyDataEntities(connectionString);
var items = from i in e.MyTables
            select i;

foreach (var i in items)
{
    // "Location" is the geography field
    var l = SqlGeography.Parse(i.Location);
    var lat = l.Lat;
    var lng = l.Long;
}

一个额外的东西,就是你需要做的任何空间存储过程中基于查询的,因为你不想从表中的所有数据拉入.NET为了使用LINQ to执行自己的空间查询。

这不是一个高贵的原生支持SQL空间类型,但它会让你与实体框架和SQL空间同时运行。



Answer 3:

您也可以肯定做LINQ到SQL与手写表和列,并直接获得SQL空间类型。 我测试样品上的DB以下(不要”忘记包括参考和‘使用’来System.SqlServer.Types

...

string connectionString = @"Data Source=YADDAYADDA;Initial Catalog=MUMBLEMUMBLE;Integrated Security=True";
var pointsFileDc = new PointsFileDC(connectionString);
var geos = (from point in pointsFileDc.pointsData
            select point).Take(10);
foreach (var geo in geos)
{
    ObjectDumper.Write(geo);
}

...

public class PointsFileDC : DataContext
{
    public Table<GeoPoints> pointsData;
    public PointsFileDC(string connection)
        : base(connection)
    {
    }
}

[Table(Name = "Points")]
public class GeoPoints
{
    [Column(IsPrimaryKey = true)]
    public int PointId;
    [Column]
    public SqlGeography GeoPoint;
}


文章来源: Spatial data types support in Linq2Sql or EF4