2011-01-06 5 views
2

Ich verwende den Devart EF-4-Anbieter für PostgreSQL.Verwenden einer SQL-Funktion in Entity Framework Wählen Sie

In einer meiner db-Tabellen habe ich eine Spalte namens the_geom, die eine PostGis Geometry type Spalte mit einem Polygon ist. Kurz gesagt, PostGis verwendet ein eigenes Binärformat, um Geometriewerte zu speichern. Um es in meiner Anwendung verwenden zu können, muss ich es in Well-Known-Binary (WKB) konvertieren, eine standardisierte binäre Darstellung der Geometrie. Dies kann durch Auswahl mit

select asbinary(the_geom) from mytable 

Die letzte Frage in Standard-SQL ganz einfach erreicht werden, ist dies: Wie kann ich, in Entity Framework, geben Sie die Funktion AsBinary() zu verwenden, Spalte auszuwählen the_geom?

Antwort

5

Es gibt eine Reihe von SQL Server-Funktionen, die Sie in Linq-Abfragen in SqlFunctions Klasse in System.Data.Objects.SqlClient Namespace verwenden können.

Suchen Sie in Ihrer Linq-Provider-Bibliothek für Postgre nach etw und fügen Sie eine berechnete Spalte mit dem Wert asbinary(the_geom) hinzu, und ordnen Sie diese Spalte in EF zu.

Sie selbst können könnten etw so schreiben, wenn Sie an dem dekompilierten Code aussehen,

public static class SqlFunctions 
{ 
    // Methods 
    [EdmFunction("SqlServer", "STR")] 
    public static string StringConvert(double? number) 
    { 
    } 
} 
+0

ich nichts dergleichen gefunden. Ich habe mein Problem gelöst, indem ich den Wert sowohl als Well-Known-Text (WKT) als auch als WKB gespeichert habe. Ich benutzte dann einen Trigger, um die WKB-Spalte jedes Mal zu aktualisieren, wenn das WKT aktualisiert wurde. Es ist überflüssig, aber erledigt die Arbeit. –

Verwandte Themen