簡體   English   中英

更新已更改的對象值

[英]Update object values that changed

我目前有以下情況:

我的應用程序中有一個配置文件部分,用戶可以在其中更新其配置文件數據。 因此,我有一個mvc表單,用戶可以在其中添加其他信息或修改其數據。 在我的表單提交功能中,我收到的用戶對象大部分已填寫但未完全填寫(某些值是null,因為我使用的是身份服務,並且我不希望用戶更改密碼哈希)。

現在這是我的問題:

如何在不編寫類似以下內容的情況下更新用戶對象:( profileData.User是已提交的用戶)

var user = await _userManager.FindByIdAsync(profileData.User.Id);
user.Email = profileData.User.Email;
user.Salutation = profileData.User.Salutation;
user.FirstName = profileData.User.FirstName;
user.LastName = profileData.User.LastName;
...
var result = await _userManager.UpdateAsync(user);

我顯然不能使用此方法,因為這將覆蓋未在提交的用戶中設置的所有字段:

var user = profileData.User

有沒有一種方法可以更新我的用戶對象而不覆蓋所有字段?

使用DTO的一個很好的理由是,對於每對get / update函數,您都可以使用不同的DTO。 與其擁有一個“包羅萬象”的更新功能,不如擁有一個可以更新您可以在每種表格中更改的屬性的功能。 是的,您最終會有很多類和函數,但是您也得到了易於測試的單次使用函數,這些函數可以很好地完成一項工作(並且您不會遇到所要解決的問題)。

var user = await _userManager.FindByIdAsync(profileData.User.Id);
user.Email = profileData.User.Email;
user.Salutation = profileData.User.Salutation;
user.FirstName = profileData.User.FirstName;
user.LastName = profileData.User.LastName;

var result = await _userManager.UpdateProfileAsync(user); <-- Only updates the 'profile' fields

我也將采取某種方式認為FindByIdAsync不應該返回密碼/鹽等。也許您應該具有一個功能FindProfileByIdAsync

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM