Entity Framework 核心 1.0 CurrentValues.SetValues() 不存在

Entity Framework Core 1.0 CurrentValues.SetValues() does not exist

我正在尝试使用 Entity Framework Core 1.0 RC 1 更新实体及其相关子实体,其中实体与 DbContext 分离。我之前使用类似于 answer.

中描述的解决方案来完成此操作

但是,我们似乎无法再使用 Entity Framework 7 执行以下操作:

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

Visual Studio 抱怨说:

EntityEntry does not contain a definition for 'CurrentValues' etc...

我想这意味着这还没有(还?)为 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();
    }