簡體   English   中英

以強類型屬性名稱為參數的方法

[英]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.

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