Obsługa typów danych przestrzennych w Linq2Sql lub EF4
Czy ktoś wie (najlepiej z referencją), czy wydanie VS2010 LinqToSQL lub EntityFramework v4 będzie obsługiwać zapytania nad typami danych przestrzennych SQL 2008?
3 answers
W EF 4.0 możesz być w stanie zhakować coś razem używając kombinacji funkcji niestandardowych i udawać, że typy przestrzenne są typami binarnymi. Jest to coś, o czym myślę, aby się poukładać, wypróbować i dodać do mojej serii porad. Ale jak dotąd nawet hack jest niesprawdzony. :(
A jeśli chodzi o bezpośrednie wsparcie, niestety ani L2S, ani EF v4 nie będą wspierać typów przestrzennych w ramach czasowych VS2010.
Entity Framework Program Manager.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-16 05:21:30
Oto obejście, aby to działało w Entity Framework / LINQ to Entity:
Możesz użyć widoku bazy danych, aby zwrócić dobrze znany tekst (używając " geometry.ToString () " w zapytaniu) lub Binary. Następnie po zwróceniu wynikowych wierszy, po prostu przekonwertuj łańcuch / binarny na obiekt SqlGeometry w .NET.
Oto przykładowe zapytanie używane do budowy widoku, który konwertuje pole" Lokalizacja " typu geometry na znany ciąg tekstowy:
SELECT ID, Name, Location.ToString() as Location FROM MyTable
Oto przykład zapytania obiekty wynikowe, które mają pole "Lokalizacja", które zawiera dobrze znaną reprezentację tekstową lub łańcuchową obiektu "Geografia":
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;
}
Dodatkową rzeczą jest to, że będziesz musiał wykonywać dowolne zapytania przestrzenne w ramach procedur składowanych, ponieważ nie chcesz pobierać wszystkich danych z tabeli do. NET, aby wykonać własne zapytania przestrzenne za pomocą LINQ.
Nie jest to elegent jako natywnie wspierający typy przestrzenne SQL, ale pozwoli Ci działać z encjami Framework i SQL Przestrzenne jednocześnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-25 15:01:36
Można również zdecydowanie zrobić Linq-to-SQL z ręcznie pisanych tabel i kolumn i uzyskać typy przestrzenne SQL bezpośrednio. Testowałem na przykładowym DB (nie zapomnij podać referencji i "używania" do systemu.SqlServer.Typy
...
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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-02 16:53:07