2009-08-21 55 views

回答

11

在EF 4.0中,您可能能够使用custom functions的组合破解一些东西,假装空间类型实际上是二进制类型。这是我正在考虑尝试并添加到my tips series的东西。但即使这种黑客行为尚未得到证实。 :(

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

Alex James

实体框架项目经理。

+0

感谢亚历克斯,似乎是一个可靠和明确的答案!EF4是否有任何特殊原因不会支持他们(太难了,需求不足,优先级太低?) – 2009-08-23 21:28:08

+2

好吧,我不会说优先级太低。我认为这是重中之重,但我会说它并不像我们最终做的一些事情那么高,比如POCO,F Ks,Model First等。 – 2009-08-23 22:33:47

+2

EF何时会获得空间类型支持? VS'2012;仅在他们被添加到SQL Server 4年后? – 2010-06-02 01:50:41

24

这里有一个解决方法,以获取它在实体框架/ LINQ to Entities中工作:

可以使用数据库视图返回Well-Known-Text(在查询中使用“geometry.ToString()”)或Binary。行被返回,只需将字符串/二进制转换为.NET中的SqlGeometry对象。

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

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来执行你自己的空间查询。

这不是一个原生支持SQL Spatial Types的优化,但它可以让你同时运行Entity Framework和SQL Spatial。

+0

非常好,非常感谢Chris。我会看看这个! – 2009-11-25 18:03:35

+0

这一直是我一直在玩/用L2S的东西。 – 2009-11-30 23:13:56

+0

非常感谢:) – 2010-01-27 18:40:20

1

你也可以用手写的表和列完全执行Linq-to-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; 
} 
相关问题