3

假設我有一個允許客戶通過Web API向我的數據庫添加/更新產品的應用程序。我有這樣的輕量級DTO:如何通過Web API跟蹤斷開的實體

public class ProductDTO 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public decimal Price { get; set; } 
} 

跟蹤實體的行業慣例是什麼,假設我想將更改存儲到審計表中。例如,顯示舊價格與新價格

在我的WebAPI控制器中接收到DTO後,是否必須從數據庫中查詢當前記錄,進行對象比較並保存差異? - 這是唯一的方法嗎?

+0

審計表將成爲一種方式;但是,您可能還想知道「誰更改了此記錄」以及審計表可能不支持的各種其他數據。在這種情況下,你應該考慮堅持一個單獨的實體。 – user1477388

+0

比較通過WebAPI接收的對象的唯一方法是首先從數據庫中檢索現有記錄以進行比較嗎? –

+0

基本上,我所說的是創建一個名爲Product_Audit的獨立實體,其功能與審計表相同,除非您必須在應用程序中填充內容(SQL不會爲您執行此操作)。這樣,您可以添加所需的其他所有信息,如用戶ID以跟蹤誰更新了記錄。爲了比較,你可以簡單地加入這個表'在ProductDTO.Id等於Product_Audit.ProductId'上。 – user1477388

回答

1

Web API有built-in logging and tracinghere is a good walkthrough

這裏是一個TraceWriter implementation using log4net或者如果NLog是更多你的杯茶然後有一個​​,這裏是another example using NLog

如果您想比較更改,則需要手動設置。您可以輕鬆訪問JSON請求。它只是一個問題,或者在舊對象和新對象之間進行區分。一個example of which在StackOverflow上。我會記錄請求標頭,請求正文,端點地址,API密鑰,舊對象(請求)和差異。然後,您可以輸出比較結果作爲差異列表,或者進行並排比較(如您在Git/SVN/TFS合併中看到的那樣)。

+0

我並沒有太注意日誌記錄,因爲我試圖跟蹤DTO並查看哪些屬性發生了更改,所以我可以將差異保存到審覈表中 –

+0

請參閱我的答案的最後部分,然後。您需要在代碼中手動執行此操作。獲取新的DTO,加載舊的DTO。比較兩者並將差異輸出爲一系列更改。即字段'X'從'A'更改爲'B'。我指出的例子很好地說明了這一點。 – Junto