2012-02-08 7 views
1

私はsqlgeographyを使用するエンティティ/テーブルを持っています。エンティティの部分クラスのプロパティ

EF 4.Xは空間型をサポートしていないため、代わりにフィールドのバイトを前後に送信しています。

私は、データベース側に変換を処理するprocsとコード側のプロパティを格納しています。

コードにプロパティを追加するには、部分クラスを使用しました。

これらのプロパティの1つは、取得と設定を処理するためにbyte []プロパティを単にラップするSqlGeographyのプロパティです。

このプロパティは、NotMappedAttributeを使用してEFから非表示にします。

もう1つは、バイト[]自体を公開するプロパティで、EdmScalarPropertyAttributeおよびDataMemberAttributeで飾られています。

次に、EFモデルデザイナー(* .edmx)にアクセスして、エンティティモデルをInsert/Update/Deleteストアドプロシージャにポイントします。

保存されたプロクシを正しく見つけ、(適切な場合)VARBINARYパラメータを取ることを認識します。

また、エンティティクラスのプロパティをそのパラメータにマッピングするプロパティを選択できるドロップダウンもあります。

ただし、このドロップダウンでは、いずれのプロパティも表示されません。私はSqlGeographyプロパティを気にしません。それはEFから隠されているためですが、データがどこから来るのかは、byte []プロパティで指摘できることが不可欠です。

私は非常にデータベースのトリガーやラッパークラスとaddiitonalフィールドを避けて、これを働かせることを避けたいと思います。

手作業で.edmxファイルを編集して、byte []プロパティを組み込もうとしましたが、マップされていません。

誰でも私にこれを動作させる方法をいくつか洞察できますか?または、最終結果を得る別の方法は?

答えて

0

我々は、空間データを公開して各テーブルの計算列を作成しましたバイト数。

次に、格納されたprocsを使用して、空間データを挿入および更新します。

1

ビューを使用してバイナリフィールドを作成することもできますが、これはデータ内の関係のxmlを手動で作成することになります。

これは、人生をシンプルで簡単にするためのEFの使用のポイントをほとんど無効にします。

このプロジェクトでは、バイナリフィールドをテーブルに追加し、サーバー上のコンバージョンを処理するsprocsとモデルの地理タイプを公開する部分エンティティクラスのプロパティを追加するだけです。

次のプロジェクト私はEFを使用するのか疑問です。 Dapperはもっと痛みのないものです。誰もが、それは彼らに適用可能であると考えている場合

は、ここでビューを使用するためのリンクです:

最後に

http://thedatafarm.com/blog/data-access/yes-you-can-read-and-probably-write-spatial-data-with-entity-framework/

http://smehrozalam.wordpress.com/2009/08/12/entity-framework-creating-a-model-using-views-instead-of-tables/

関連する問題