我知道這是一個老問題,但我今天就遇到了這個問題,它似乎仍無法在EF核心實現。所以我寫了一個擴展方法,在此期間使用擴展方法將更新任何對象的屬性與任何其他對象的匹配值。
public static class EFUpdateProperties
{
public static TOrig UpdateProperties<TOrig, TDTO>(this TOrig original, TDTO dto)
{
var origProps = typeof(TOrig).GetProperties();
var dtoProps = typeof(TDTO).GetProperties();
foreach(PropertyInfo dtoProp in dtoProps)
{
origProps
.Where(origProp => origProp.Name == dtoProp.Name)
.Single()
.SetMethod.Invoke(original, new Object[]
{
dtoProp.GetMethod.Invoke(dto, null) });
}
);
return original;
}
}
用法:
public async Task UpdateEntity(EditViewModel editDto)
{
// Get entry from context
var entry = await _context.Items.Where(p => p.ID == editDto.Id).FirstOrDefaultAsync();
// Update properties
entry.UpdateProperties(editDto);
// Save Changes
await _context.SaveChangesAsync();
}
感謝,這正是我一直在尋找。我應該自己檢查公開的問題,但是沒有想到要看那裏。 –
供參考:現已實施。 –