0

エンティティを作成したいデータベースがあり、RESTful 出力を生成します。

私の目的は、テーブルがエンティティになったら、テーブルの 1 つにプロパティを追加することです。そのプロパティのデータは、テーブル内のいくつかの異なるフィールドで行われた計算を通じて思いついたものです。そこから、コード ジェネレーターは通常どおり RESTful 出力を作成します。

カスタム ツールとして SampleEdmxCodeGenerator を使用して、edmx ファイルの SSDL、CSDL、およびマッピング セクションを更新することができました。edmx ファイルのすべてのセクションにカスタム プロパティを入力すると、プロパティがデータベースに存在しないため、svc が失敗します。プロパティを SSDL から除外し、クライアント スキーマ (CSDL) とマッピング セクションに配置すると、プロジェクトをビルドできません。

部分クラスを変更して追加しましたが、クラスの作成時にメソッドを設定する必要があるという問題があり、まだそれができていません。

私は正しい方向に向かっていますか、それとも不可能ですか? 最小限の労力でこれを行うことができるように思えますが、壁にぶつかり続けています。

4

2 に答える 2

3

行きたいところにたどり着くために遠回りをしていると思います。私はこれらのアプローチのいずれも(最近)使用していないため、あなたが求めていることを正確に実行できない可能性がありますが、これを試すことができます:

  1. .edmx モデルのすぐ隣に、エンティティと同じ名前の部分クラス ファイルを作成します。
  2. その中で、必要なプロパティを読み取り専用プロパティとして指定し、各 で計算を行いますget
于 2009-09-25T00:01:19.093 に答える
2

部分クラスと部分メソッドは、私の答えの最初の部分でした。私が本質的にやろうとしていることは、私にはできません。部分メソッドと部分クラスを使用して返されるデータを操作できます。On methodname Changed() メソッドをプラグインして、表示したい方法でデータをフォーマットできますが、それでは目的の結果の途中までしか取得できません。

私がやりたいことは、データベース内のいくつかの異なるプロパティ (a と b など) から計算された、データベース内の列として存在しない (したがって、私のエンティティには存在しない) プロパティ c を作成することです。 )、プロパティ c をエンティティ フレームワーク クラスに追加します。これを行う際に、RESTful Web サービスの出力に生成されると考えました。

発生する問題は、行った変更をクラスで更新し、それをデータ ソースに反映させる必要があることに起因します。プロパティを読み取り専用にしたいので、私はそれを気にしませんでした。私が集めたものから、これは不可能です。

参考までに、次の 2 つの投稿が非常に役に立ちました: Adding custom property to Entity Framework class (現在、投稿できる URL は 1 つだけなので、別の記事のアドレスをここに示します)

social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/b7a9e01d-c5c2-4478-8f01-00f7f6e0f75f

私がやろうと決めたことは、これまで行ってきたようにエンティティを公開し、データを操作して再フォーマットし、必要なプロパティを導入する RESTful サービスを利用することです。結果を独自のデータ オブジェクトに変換し、それをデータ ソースとして使用して、さらに別の RESTful Web サービスによって公開します。この Web サイトは、カスタム データソースを公開する方法の良い例を示していると思います。

mstecharchitect.blogspot.com/2008/12/surfacing-custom-data-source-in-adonet.html

何らかの理由で遅すぎる場合は、データベースに別のテーブルを作成して、データを再処理し、探している形式で計算された出力を作成できると思います。私が避けたいのは、手のひら、iPhone、ブラックベリーなどのマイクロデバイス上にあるため、結果のクライアントでデータ操作を行わなければならないことです。

同じ問題を抱えている他の人に役立つことを願っています。現在のバージョンの Data Services では不足しているように見えますが、今後のバージョンである程度は対処されると確信しています。たぶん、T4 と .net 4.0 がそれに対処するでしょう。わからない。

于 2009-09-26T01:01:20.103 に答える