0

EntityFrameworkを使用してPatientEntities用のWCFデータサービスをまとめています。

私のソリューションは、これらの要件に対処する必要があります。

  • エンティティPatientのプロパティDateOfBirthは、SQLServerに文字列として格納されます。エンティティクラスが「文字列」型ではなく、DateTime型も使用するのが理想的です。(ストレージレイヤーから抽象化するため、これが可能になると思います)。エンティティとSQLServerが同期するように、DateTime / stringとの間で変換する変換メカニズムをどこに配置できますか?ストレージレイヤーの構造を変更できないため、回避する必要があります。
  • クライアントはLINQ式を使用してサービスを利用できるため、WCFデータサービス(読み取り専用なので、変更を保存する必要はありません)を使用する必要があります。GetPatient(int ID)などの単一のメソッドに制約されることなく、必要な任意のクエリシナリオに基づいて結果を生成できます。

DTOを使用しようとしましたが、ObjectContextをDTOにマッピングする際に問題が発生しました。理論的には可能ではないと思います...または、可能であれば複雑すぎます。

自己追跡エンティティを使用しようとしましたが、正しい場合は.edmxファイルのメタデータが必要であり、これにより別のプロパティデータ型が許可されません。

また、エンティティゲッターメソッドにカスタマイズを追加して、タイプ「string」のプロパティ「MRN」が返される前に.Replace( "MR〜"、string.Empty)を実行する必要があるようにします。これをgetterメソッドに追加できますが、Entity Frameworkが次にエンティティクラスを更新するときに、これを上書きするという問題があります。これらを置くことができる恒久的な場所はありますか?

代わりにPOCOを使用する必要がありますか?それはWCFデータサービスでどのように機能しますか?サービスはどこでメタデータを取得しますか?

4

1 に答える 1

0

これは間違いなく可能です。使用する必要があるのは、特定の列をエンティティのプロパティにマップする方法を制御できる QueryView です。たとえば、患者エンティティでできることは次のとおりです。

<EntitySetMapping Name="Patients">
<QueryView>
select value conceptualnamespace.Patient(p.PatientId,
cast(p.DateOfBirth as Edm.DateTime), 
replace(p.Name,'MR~','')
from entitycontainer.Patients as p
</QueryView>
</EntitySetMapping>

この概念については、私の本で詳しく説明しています。レシピが呼び出されます。15-2. 1 つ以上のテーブルのカスタマイズされた部分へのエンティティのマッピング

于 2010-07-10T18:37:29.193 に答える