0

Web API Put メソッドは jQuery Ajax から適切に呼び出されますが、C# コードは更新を保存しません。json オブジェクトには、MEMBERS エンティティのすべてのプロパティが含まれているわけではありません。コンテキストはデータベースへの変更を保存しません。

public void Update(string id, MEMBERS obj)
    {
        var memToUpdate = context.MEMBERS.Find(obj.MEMBERID);
        if (memToUpdate != null)
        {
            context.Entry(memToUpdate).CurrentValues.SetValues(obj);
            int result = context.SaveChanges();
            System.Diagnostics.Debug.WriteLine("save result:" + result);
        }
    }

このコードは機能しますが、このように指定せずに、JSON オブジェクトにある MEMBERS エンティティのすべてのプロパティをコンテキストで更新するにはどうすればよいですか?

public void Update(string id, MEMBERS obj)
    {
        MEMBERS memToUpdate = context.MEMBERS.Find(obj.MEMBERID);
        if (memToUpdate != null)
        {
            //context.Entry(memToUpdate).CurrentValues.SetValues(obj);
            memToUpdate.FIRSTNAME = obj.FIRSTNAME;
            memToUpdate.LASTNAME = obj.LASTNAME;
            int result = context.SaveChanges();
            System.Diagnostics.Debug.WriteLine("save result:" + result);
        }
    }

Jクエリ:

var data = {
        MEMBERID: "B745",
        FIRSTNAME: "TESTPUT",
        LASTNAME: "UPDATED WEBAPI"
    };

    var json = JSON.stringify(data)

    $.ajax({
        url: 'api/Members/' + data.MEMBERID,
        type: 'PUT',
        contentType: "application/json; charset=utf-8",
        data: json,
        success: function (results) {
            alert("Success");
        }
    })

私の質問は、Web API Put の部分的な更新を行う方法についてです。oData の Delta<> タイプを使用した Patch メソッドについて読みました。nuget から Web API oData をインストールしましたが、VS は型または名前空間のデルタが存在しないと訴えます。誰かがこの問題に遭遇しましたか?

4

2 に答える 2