2012-05-04 45 views
0

我正在寫一個WCF Rest API,爲實體提供CRUD功能,如學生。下面是它是如何定義的: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,但不提供姓名和姓氏。 Id是必填字段。我需要知道在這種情況下最好的方法/設計是什麼?

我可以從數據庫中獲取現有記錄,然後根據需要執行比較。這種方法的問題是,我無法知道用戶是否真的想將字段更新爲空。再次,比較似乎不是一個整潔的設計。有任何想法嗎?

+1

我可能在系統設計上缺少一些東西,但更新意味着客戶端已經有了一個最近的學生記錄。你應該在你的API中有一個「GET」方法來檢索學生記錄。用戶將更新當前記錄中的信息併發送完整記錄。因此,如果用戶只更改了DOB,它仍然會有當前的ID,名稱等...除非您正在執行某種更改跟蹤,否則無需執行比較。 –

+0

@KevinJunghans,是的,我也有GET方法。 (也更新了問題)。但問題是,由於我不會使用服務,因此我無法強制客戶端在更新之前調用GET。它的一種功能,只需更新您提供的字段即可更新。 – Obaid

回答

0

發送中的所有值SP,然後同時更新記錄寫case語句來檢查空 可以在更新語句檢查ISNULL,所以當參數爲null,然後用自己的價值觀

更新它們

更新學生 設置名稱=情況下ISNULL(@Name,「」)=「」然後命名其他@Name結束 其中Id = 1127871

+0

那麼我使用實體框架,並不打算使用存儲過程。我想在處理這個東西到達數據庫之前。 – Obaid

+0

然後你在做什麼是好的! – Deepesh