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?

Author: Colin Desmond, 2009-08-22

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.

Alex James

Entity Framework Program Manager.

 11
Author: Alex James,
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.

 24
Author: Chris Pietschmann,
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;
}
 1
Author: RebCabin,
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