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();
}
我正在尝试使用 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();
}