2010-12-14 2 views
2

私はかなり普通だと思っていることをやっています(私は個人的にこれを行う必要はありませんでしたが) 「ノー・ブレイナー」の道が進むだろうが、まだそれを見つけることはない。それは本当にイライラしている。WFFデータを使用したWPFアプリケーション - EF、Linq2SqlまたはWCFデータサービス - なし「Easy」と表示される

データ指向のビジネスアプリケーションであるWPFアプリケーションを作成します。私のデータは、標準のSQL Server 2008データベースを持つリモートIISサーバー(私が管理している)から来るので、Webサービス/ WCFは進歩しているようです。リモートサービスは、(WPFクライアントの)ユーザー名/パスワードログインを使用して安全(合理的)にする必要があります。

私はサードパーティのORM製品を使いたくないのですが、サービスとデータベースの間のデータレイヤーが非常に単純なORMタイプの機能に対応できると期待しています(データを手作りしたくない検索および永続化レイヤ)。 Imは非常にシンプルなアプリケーションになるので、並行性についてはあまり心配していません。

私のオプションは、次のいずれかのように見える:

  1. ADO.NET Entity FrameworkのLinq2Sql
  2. WCFの上になし、さらに調査に

WCF Data Servicesの

  • WCF上上記のうちの1つは、「いいえ」と思われるIm after

    1)ADO.NETエンティティフレームワーク - Ive WCFでオブジェクトをシリアライズするさまざまな問題が発生しました。私がPOCOエンティティを生成して使用しようとしても、カスタム属性を持つサービスコントラクトを装飾して常にエラーにならないようにする必要があります。フラットなオブジェクトグラフ以上に手作業をしなければならないようです。 EFは単にサービスを介して公開されるようには設計されていないようです。

    2)Linq2Sql - これはEFよりはるかに良いとは思われません。私はあまりにも多くのものをハンドクランクする必要があるようです。 IveはデザイナーとSQLMetalを試しましたが、何も「うまくいく」とは思われません。

    3)WCF Data Servicesは - これはそれの顔に良いオプションのように思えるが、私はちょうど、サービス層の上に「生で」私のSQLデータベーステーブルを露出してるよう本質的に思えます。私はこの技術の専門家ではありませんが、潜在的に危険なアプローチのように思えます。その上で、アクセスセキュリティを標準としてサポートしているようです(認証を必要とするようにハックする必要があります)。

    私が言ったように、このシナリオでは頭がおかしくない解決策が必要なように感じますが、私の頭はまだ傷ついています。私は.NETテクノロジで多くのことをやったことがありますが、この分野が私の理解にはちょっとした穴を表していますので、私のコメントや前提が単純であれば謝ります。

    もちろん、EFやLinq2SQLの 'ハッキーな'長距離ラウンドが私ができることばかりである場合もあります。この場合、私は自分の袖を巻き上げることができ、より洗練されたソリューションを見逃してしまった。

    ご迷惑をおかけして申し訳ございません。

    答えて

    3

    これは主観的な少しですが、私は私の意見を提供します。

    まず第一に、L2SQLを忘れてしまいます。基本的には廃止されており、EF4の完全なPOCOサポートはありません(これはできますが、XMLの修正やSQLMetal生成が必要です)。左から右のエンティティクローニングの悪夢。

    私はADO.NETエンティティフレームワーク、特にWCF、Entity Framework 4.0を使用します。モデルに柔軟性を持たせることができます(継承などのOOの原則を適用する機能を含む)。

    使用セルフトラッキングエンティティ。はい、サービス契約を飾る必要があります - これは設計によるもので、これには多くの理由があります。

    実際のEFエンティティをシリアル化するのではなく、常にDTOを使用できます。

    ODataは、柔軟性とシンプルさという点で本当にうまく機能します。しかし、あなたのモデルを単一のクライアントアプリケーションで消費するだけであれば、専用サービスレイヤー(WCF)がより良いアプローチです。

    +0

    私は、新しいアプリケーションEFは、L2Sではなく、移動する方法に同意します。しかし、L2SはPOCOをサポートしています(それは最初からそうしていました)。ちょうどgoogle 'LINQ to SQL POCO'。 – Steven

    +0

    @スティーブン - それを知らなかった。そしてもう一度私はしばらくL2Sに触れていない - 私はEFのグループです。 :) – RPM1984

    +0

    はい、それは自己追跡entitesが進む方法かもしれないようです。私は良いランナウト(リンクを参照してください)を見つけて、彼らに試してみましょう - ありがとう http://blogs.msdn.com/b/adonet/archive/2009/06/22/feature-ctp-walkthrough-self- entity-for-the-entity-framework.aspxのためのtracking-entities –

    1

    3)WCF Data Servicesは - これは それの顔に良いオプションのように思えるが、私はちょうど サービスにわたって「 生に」私のSQLデータベーステーブルを露出してるよう は、基本的にそれはそうです層。

    これは最初の印象かもしれませんが、根本的に間違っています。ウェブ上で公開されているのはモデルです。あなたはそのモデルに何が入るのか、WCF Data Servicesの消費者がそのモデルのエンティティを見たり、更新したりすることができるかを完全に制御できます。

    これは、Entity Frameworkが登場し、光栄に輝く(そしてLinq-to-SQLが悲惨に失敗する)ところで、データベース(またはその一部)をエンティティデータモデルに入れて変更することができます。テーブル名とはまったく異なるエンティティ名を微調整したり、計算された属性を追加したり、特定の属性などを削除したりすることができます。

    あなたはかなりシンプルなアプリの話をしている場合、それは間違いなく私は行くだろう方法です:

    • そのEDM以上を公開するデータベースをつかむと、EF
    • を使用してエンティティデータモデルにそれを回しますWCFデータサービスは、読み取り専用で見ることができるものと、ワイヤで更新されるものを定義します。
    関連する問題