Entity framework core 实体框架核心1.0 CurrentValues.SetValues()不存在
我试图使用EntityFrameworkCore1.0RC1更新一个实体及其相关子实体,其中实体与DbContext分离。我以前使用过类似于本文所述的解决方案 但是,我们似乎无法再使用Entity Framework 7执行以下操作:Entity framework core 实体框架核心1.0 CurrentValues.SetValues()不存在,entity-framework-core,Entity Framework Core,我试图使用EntityFrameworkCore1.0RC1更新一个实体及其相关子实体,其中实体与DbContext分离。我以前使用过类似于本文所述的解决方案 但是,我们似乎无法再使用Entity Framework 7执行以下操作: DbContext.Entry(existingPhoneNumber).CurrentValues.SetValues(); Visual Studio抱怨: EntityEntry不包含“CurrentValues”的定义 等等 我想这意味着EF Core
DbContext.Entry(existingPhoneNumber).CurrentValues.SetValues();
Visual Studio抱怨:
EntityEntry不包含“CurrentValues”的定义
等等
我想这意味着EF Core 1.0还没有(尚未?)实现这一功能?除了手动更新属性,还有其他解决方案吗?正如您所注意到的,这个API还没有在EF Core中实现。查看此工作项:我知道这是一个老问题,但我今天遇到了这个问题,而且它似乎仍然没有在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();
}