SQL Server 2008 R2 で sys.geography 型を使用しようとしています。この地理タイプをロケーション ベースのクエリに使用したいと考えています。たとえば、場所を (経度変数と緯度変数として) ストアド プロシージャに渡し、近くにあるすべてのレコードを返します。
問題は、エンティティ フレームワークが地理タイプをサポートしていないため、この値を C# から直接設定できないことです。
同じテーブルに LocationLatitude 列と LocationLongitude 列を作成することで、この問題を回避しました。エンティティ フレームワークで LocationLatitude 列と LocationLongitude 列を操作し、データベース ストアド プロシージャで地理タイプの "Location" 列を操作します。
私が知る限り、これら 2 つのフィールドから地理の「場所」列を派生させる方法は 3 つあります。
- 「場所」を計算列にする
- テーブルの内容と計算された場所を返すビューを作成します
- テーブルにデータ トリガーを作成します。これにより、地理値が計算され、LocationLongitude または LocationLatitude 列が更新されるたびに Location 列が入力されます。
性能的にはどちらが良いか悩んでいます。#1が最悪だと思うので、#2と#3の間でトスだと思います。
現在、#3 (データ トリガー) を使用していますが、通常はデータ トリガーを避けるのが最善であることはわかっています。これは、その観点からは #2 (ビュー) が最適であることを意味しますが、#2 を使用することは、何らかの理由で信じられないほどばかげているのではないかと心配しています。Stack Overflow は、それを確認するのに最適な場所です。
すぅ…これには#1、#2、#3、または他の方法を使用する必要がありますか?