2016-04-02 19 views
3

我試圖更新實體和使用實體框架核心1.0 RC 1,其中的實體從分離的DbContext及其相關的子實體。我之前使用與此answer中描述的解決方案類似的解決方案完成了此操作。實體框架的核心1.0 CurrentValues.SetValues()不存在

然而,我們似乎不再能夠做到使用實體框架7如下:

DbContext.Entry(existingPhoneNumber).CurrentValues.SetValues(); 

Visual Studio中抱怨說:

EntityEntry不包含「CurrentValues的定義' etc ...

我認爲這意味着這還沒有(還沒有?)EF英孚1.0實施?除了手動更新屬性之外,還有其他解決方案嗎?

回答

2

我知道這是一個老問題,但我今天就遇到了這個問題,它似乎仍無法在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(); 
    }