2012-05-04 26 views
0

エンティティにCRUD機能を提供するWCF Rest APIを作成しています。学生です。ここでは、それが定義されている方法です。WCF REST APIレコードの一部更新

class Student 
{ 
    Guid Id; 
    string Name; 
    string LastName; 
    string Age; 
    DateTime DOB; 
} 

私のサービス契約は、このようなものです:

class StudentService 
{ 
    [WebInvoke(Method = "POST")] 
    public void Add(Student student) 
    {...} 

    [WebInvoke(Method = "PUT")] 
    public void Update(Student student) 
    {...} 

    [WebGet()] 
    public void Get(string Id) 
    {...} 

} 

今事は生徒の記録を更新している間、クライアントは完全なデータを提供しないことです。例えば、それはIdとDOBを提供しますが、名前とLastNameは提供しません。 IDは必須フィールドです。私はそのような場合に、何が最良のアプローチ/デザインになるのかを知る必要がありますか?

私はdbから既存のレコードをフェッチし、両方で比較を実行し、必要に応じて更新することができます。このアプローチの問題は、ユーザーが実際にフィールドをnullに更新するかどうかを知る方法がないことです。そして再び、比較はすっきりしたデザインではないようです。何か案は?

+1

私はあなたのシステム設計で何かを見逃しているかもしれませんが、更新はクライアントがすでに働いている最近の学生記録を持っていることを意味します。 APIには、学生レコードを取得する「GET」メソッドが必要です。ユーザーは現在のレコードの情報を更新し、完全なレコードを返送します。したがって、ユーザーがDOBを変更しただけでも、現在のID、名前などが保持されます。何らかの変更追跡を実行していない限り、比較を行う必要はありません。 –

+0

@KevinJunghans、はい私はGETメソッドも持っています。 (質問も更新されました)。しかし、私はサービスを消費しないので、アップデートする前にクライアントにGETを呼び出させることはできません。あなたが提供するフィールドだけを更新することで更新が機能するような機能です。 – Obaid

答えて

0

この種のものを扱う様々な戦略を通過した後、私は、ソートの実装=他@Nameエンド に名前を付けます何がこの質問への回答:Only update some properties on an EF entity that are not set to null

一言で言えば、私は、どのプロパティがデメタライズ中に設定されたのかを追跡しておき、それらのプロパティのみを更新しています。

0

パラメータがnullのときに、その後

のような独自の値

でそれらを更新し、更新するレコードはヌル をチェックするためのcase文を書き、その後ながら、あなたはUPDATE文にISNULL確認することができ、SPのすべての値を送ります

アップデート学生 設定名=場合ISNULL(@Name、「」)=「」その後、Idは1127871

+0

私はEntityフレームワークを使用しており、ストアドプロシージャを使用する予定はありません。私はそれがデータベースに到達する前に、このことを処理することを考えています。 – Obaid

+0

あなたがやっていることは大丈夫です! – Deepesh

関連する問題