實體框架核心1.0 CurrentValues.SetValues()不存在

entity-framework-core

我正在嘗試使用Entity Framework Core 1.0 RC 1更新實體及其相關子實體,其中實體與DbContext分離。我之前使用的解決方案類似於本答案中描述的解決方案。

但是,似乎我們無法再使用Entity Framework 7執行以下操作:

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

Visual Studio抱怨說:

EntityEntry不包含'CurrentValues'等的定義......

我認為這意味著這還沒有(但?)已經為EF Core 1.0實現了?除了手動更新屬性外,還有其他解決方案嗎?

一般承認的答案

您已經註意到,此API尚未在EF Core中實現。請參閱此工作項: https//github.com/aspnet/EntityFramework/issues/1200


熱門答案

我知道這是一個老問題,但我今天遇到了這個問題,看來它仍未在EF Core中實現。所以我寫了一個擴展方法,在此期間使用它將使用任何其他對象的匹配值更新任何對象的屬性。

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();
    }


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因