Entity Frameworkコア1.0 CurrentValues.SetValues()は存在しません

entity-framework-core

質問

エンティティと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();
    }


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ