20

LinqToSQLまたはEntityFrameworkv4のVS2010リリースがSQL2008空間データ型を介したクエリをサポートするかどうかを(理想的には参照して)誰かが知っていますか?

4

3 に答える 3

24

Entity Framework / LINQtoEntitiesで機能させるための回避策は次のとおりです。

データベースビューを使用して、Well-Known-Text(クエリで "geometry.ToString()"を使用)またはバイナリを返すことができます。次に、結果の行が返されたら、文字列/バイナリを.NETのSqlGeometryオブジェクトに変換するだけです。

ジオメトリタイプの「場所」フィールドをWell-Known-Text文字列に変換するビューを作成するために使用されるサンプルクエリを次に示します。

SELECT ID, Name, Location.ToString() as Location FROM MyTable

次に、「geography」オブジェクトのWell-Known-TextまたはString表現を含む「Location」フィールドを持つ結果のエンティティをクエリする例を示します。

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;
}

もう1つ、LINQを使用して独自の空間クエリを実行するために、テーブルから.NETにすべてのデータをプルする必要がないため、ストアドプロシージャ内で空間ベースのクエリを実行する必要があります。

これは、SQL Spatialタイプをネイティブにサポートするほど効率的ではありませんが、EntityFrameworkとSQLSpatialを同時に実行できるようになります。

于 2009-11-25T15:01:36.223 に答える
11

EF 4.0では、カスタム関数の組み合わせを使用して何かを一緒にハックすることができ、空間型が実際にはバイナリ型であるかのように見せかけることができる場合があります。これは、私がいじくり回して試してみて、ヒントシリーズに追加することを考えているものです。しかし、まだハックでさえ証明されていません。:(

また、直接サポートに関しては、残念ながら、L2SもEFv4もVS2010タイムフレームで空間タイプをサポートしません。

アレックスジェームス

EntityFrameworkプログラムマネージャー。

于 2009-08-23T20:51:29.590 に答える
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;
}
于 2010-11-02T16:53:07.720 に答える