没有人知道(理想地,与参考),LinqToSQL或的EntityFramework V4的VS2010释放是否支持查询在SQL 2008的空间数据类型?

有帮助吗?

解决方案

在EF 4.0你也许可以使用的自定义功能和假装的空间类型是真正的二进制类型。这是什么,我想周围碴和尝试和增加的我的秘诀系列。但目前还连劈是未经证实的。 :(

和作为用于直接支持,不幸的是既不L2S或EF V4将支持空间类型在VS2010时间表。

亚历詹姆斯

实体框架程序管理器。

其他提示

下面是一个解决办法得到它在实体框架/ 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空间同时运行。

您也绝对可以做到的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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top