[英]Method that takes strongly typed property name as parameter
我想重構這兩種方法,唯一的區別是currentUser對象上的屬性得到更新(以及參數名稱,但這並不重要)。
public User SaveBaselineModelTemplateId(int baselineModelTemplateId)
{
using (var db = _contextFactory.GetContext())
{
var currentUser = db.Users.Single(x => x.Login == Environment.UserName);
HERE -> currentUser.BaselineModelTemplateID = baselineModelTemplateId;
db.SaveChanges();
return currentUser;
}
}
public User SaveComparisonModelTemplateId(int comparisonModelTemplateId)
{
using (var db = _contextFactory.GetContext())
{
var currentUser = db.Users.Single(x => x.Login == Environment.UserName);
HERE -> currentUser.ComparisonModelTemplateID = comparisonModelTemplateId;
db.SaveChanges();
return currentUser;
}
}
我想要一個可以調用的方法,例如SaveInt(ComparisonModelTemplateID, 42)
或SaveInt(x => x.ComparisonModelTemplateID, 42)
。 似乎有一種使用表達式樹來執行此操作的方法,但是謝謝,我找不到要執行的操作的確切示例。
您不需要為此的表達式樹-一個簡單的Action<User>
就足夠了:
private User ModifyAndSave(Action<User> modify) {
using (var db = _contextFactory.GetContext())
{
var currentUser = db.Users.Single(x => x.Login == Environment.UserName);
modify(currentUser);
db.SaveChanges();
return currentUser;
}
}
public User SaveBaselineModelTemplateId(int baselineModelTemplateId)
{
return ModifyAndSave(u => u.BaselineModelTemplateID = baselineModelTemplateId);
}
public User SaveComparisonModelTemplateId(int comparisonModelTemplateId)
{
return ModifyAndSave(u => u.ComparisonModelTemplateID = comparisonModelTemplateId);
}
上面的兩個public
方法將不同的操作傳遞給上面的公共ModifyAndSave
方法。 常用方法采用Action<User>
,該操作告訴User
在保存修改之前如何處理從數據庫中檢索到的User
對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.