Linq2Sql または EF4 での空間データ型のサポート
-
19-09-2019 - |
質問
LinqToSQL または EntityFramework v4 の VS2010 リリースが SQL 2008 空間データ型に対するクエリをサポートするかどうかを (理想的にはリファレンス付きで) 知っている人はいますか?
他のヒント
ここでエンティティにエンティティフレームワーク/ LINQでの作業それを得るための回避策があります:
あなたは、よく知られているテキスト(クエリで「geometry.ToStringを()」を使用して)、またはバイナリを返すために、データベースのビューを使用することができます。得られた行が返されたら、次に、単に.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;
}
1つの追加の事、あなたはLINQを使用して独自の空間検索を実行するためには、.NETにテーブルからすべてのデータを取得したくないので、あなたは、ストアドプロシージャ内の任意の空間ベースのクエリを行う必要がありますです。
これは、ネイティブSQLの空間タイプをサポートelegentではありませんが、それは同時にエンティティフレームワークとSQL空間で実行しているあなたを得るでしょう。
また、間違いなく手で書かれたテーブルと列でLINQのツー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;
}