Sto tentando di aggiornare un'entità e le relative entità figlio correlate utilizzando Entity Framework Core 1.0 RC 1, in cui le entità vengono disconnesse da DbContext. L'ho già fatto usando una soluzione simile a quella descritta in questa risposta .
Tuttavia, sembra che non siamo più in grado di eseguire quanto segue utilizzando Entity Framework 7:
DbContext.Entry(existingPhoneNumber).CurrentValues.SetValues();
Visual Studio lamenta che:
EntityEntry non contiene una definizione per 'CurrentValues' ecc ...
Presumo questo significa che questo non è stato ancora implementato per EF Core 1.0? Oltre all'aggiornamento manuale delle proprietà, esiste un'altra soluzione?
Come avrai notato, questa API non è ancora implementata in EF Core. Vedi questo elemento di lavoro: https://github.com/aspnet/EntityFramework/issues/1200
So che questa è una vecchia domanda, ma oggi mi sono imbattuto in questo problema e sembra che non sia ancora implementato in EF Core. Così ho scritto un metodo di estensione da utilizzare nel frattempo per aggiornare le proprietà di qualsiasi oggetto con i valori corrispondenti di qualsiasi altro oggetto.
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;
}
}
Uso:
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();
}