WCF で Entity Framework を使用して質問があります。EF DbContext で .NET 4.5 を使用しています。
WCF で EF を使用するために私が知っていることは次のとおりです。それらが不十分であるか、一部が必要でない場合があります。
- EF ADO.NET モデルを作成します。
- DbContext テンプレート ジェネレーターを使用して、POCO クラスを別のプロジェクト (ProjectName: Entities) に分離します。
- POCO プロジェクトの TT テンプレートを data プロジェクト (ProjectName: Data) の edmx ファイルにポイントします。"..\Data\MyEdmx.edmx"
- [DataContract(IsReference(True))] および [DataMemeber] 属性を POCO プロジェクトの .TT ファイルに追加して、クラスとプロパティがシリアル化属性を持つようにします。プロジェクトに Runtime.Serialization 参照を追加し、名前空間を .TT ファイルに追加します。これにより、.TT ファイルの保存時にクラスを再作成したり、新しいエンティティを追加したりするときに、属性宣言を失わないようにすることができます。
- ProjectName: Entities 参照を Data プロジェクトに追加します。
- データ プロジェクトの Context.tt ファイルで ProxyCreation と LazyLoading をオフにします。
- (ProjectName: Entities) と (ProjectName: Data) を wcf サービス プロジェクトに追加します。
- EntityFramework 接続文字列を WCF プロジェクトにコピーします。
- サービスのすべての選択メソッドは、ナビゲーション オブジェクトを設定する場合は .Include を使用する必要があります。これにより、ロードしたいとき、または制限データを表示したいときの制御が向上します。また、遅延読み込みがオフになっているため、子/関連を自動的に取得しません。
- 挿入または更新または削除、サービスはコンテキストを作成し、手動でオブジェクトの状態を変更または追加するように設定する必要がありますか? そうしないと、変更が保存されません。DbContext.Attach を使用して、エンティティの状態を適切に追加、変更などにアタッチして設定します。
私が抱えていた問題は、WCF で EF を使用するために実行する手順の良い例を見つけることができなかったことです。断片的なものしか見ることができませんでした。私はWCF EFの世界に遅れて参加したため、見つけることができなかった可能性があります。
プロキシ WCF を使用できるかどうかわかりません。プロキシの利点はまだ完全には理解していません。
また、EF とサービスの間のレイヤーとして DTO を使用するための推奨事項も読みました。これには、マッパーを配置する必要があります。すぐに必要かどうかはわかりません。しかし、ビジネス オブジェクトに表示される不要なデータベース列を非表示にするのに役立つことは明らかです。たとえば、作成者、更新者などの監査列は、クライアントには表示されません。
WCF から取得した他のバインディング オプションが失われるため、DataServices の使用を選択しませんでした。他のバインディング メカニズムを必要とする/サポートするクライアントの将来の要件を考えて、DataServices のシンプルさを失うことが良いことかどうかはわかりません。
任意の推奨事項をいただければ幸いです。
追加の更新
MSDN http://msdn.microsoft.com/en-us/library/ee705457(v=vs.100).aspxでこれを見つけました。一部のリンクは、プレリリース ドキュメントを指していました。しかし、これにより、EF と WCF を使用する上で、さらにいくつかのアイデアが得られます。
この記事では、WCF でプロキシを使用する方法、POCO の変更追跡について説明します。これは私にとって良いスタートです。もっとアドバイスがあれば、あなたの考えを教えてください。
更新 2 * N 層のもう 1 つの優れたリンク*
http://msdn.microsoft.com/en-us/magazine/dd882522.aspx
私が費やしている時間が本当に私を教育していることを嬉しく思います!