エンティティとDbContextからデタッチされているEntity Framework Core 1.0 RC 1を使用して、エンティティおよび関連する子エンティティを更新しようとしています。私はこれまで、この回答に記載されているのと同様のソリューションを使用してこれを行ってきました。
しかし、Entity Framework 7を使用して以下のことを行うことはできなくなったようです。
DbContext.Entry(existingPhoneNumber).CurrentValues.SetValues();
Visual Studioには次のような文句があります。
EntityEntryに 'CurrentValues'などの定義が含まれていません...
私はこれがEF Core 1.0用に実装されていないことを意味します(まだですか?)手動でプロパティを更新するだけでなく、他にも解決策がありますか?
ご存じのように、このAPIはまだEFコアに実装されていません。この作業項目を参照してください: https : //github.com/aspnet/EntityFramework/issues/1200
私はこれが古い質問だと知っていますが、今日この問題に遭遇しました。それはまだEFコアに実装されていないようです。だから、私はその間に使用する拡張メソッドを書いて、オブジェクトのプロパティを他のオブジェクトの値と一致させて更新します。
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();
}