I have this method and as you can see I modified it:
[HttpPut]
public HttpResponseMessage PutSIMSData(string langid, byte period, byte year, string data, int userId, SIMSData simsdata)//HttpRequestMessage req)
{
    try
    {
        //SIMSData simsdata = new SIMSData();
        //string jsonContent = req.Content.ReadAsStringAsync().Result;
        //simsdata = JsonConvert.DeserializeObject<SIMSData>(jsonContent);
        //SIMSData simsdata = db.SIMSDataDbSet.Find(langid, period, year);
        if (ModelState.IsValid && 
            simsdata.LanguageID == langid &&
            simsdata.PeriodID == period &&
            simsdata.YearID == year)
        {
            //simsdata.UserID = userId;
            //simsdata.Data = data;
            db.Entry(simsdata).State = EntityState.Modified;
            db.SaveChanges();
            return Request.CreateResponse(HttpStatusCode.OK, simsdata);
        }
        else
        {
            return Request.CreateResponse(HttpStatusCode.BadRequest, simsdata);
        }
    }
    catch (Exception e)
    {
        return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
    }
}
But the problem is, I keep getting Error 500, i.e I am trying to insert row with key combination which already exists in the table.
My table is a composite key table, 3 keys, LanguageID, PeriodID, YearID, Data and UserId are fields that should be updated.
My ajax call looks like this:
updateSIMSDataWithAllParams: function (lang, period, year, data, userId) {
    jq.ajax({
        context: simsDataView,
        contentType: 'application/json; charset=utf-8',
        type: "PUT",
        url: "/api/SIMSData",
        dataType: "json",
        data: JSON.stringify({
            LanguageID: lang,
            PeriodID: period,
            YearID: year,
            Data: data,
            UserID: userId
        }),
        beforeSend: function (jqXHR, settings) {
            simsDataView.setStatusMsg(messages.listingTreeDataMsg, "blue");
        },
        success: function (data, textStatus, jqXHR) {
        },
        error: function (jqXHR, textStatus, errorThrown) {
            errorsMsgTxt.text("SIMS Tree: " + textStatus + ". Error: " + errorThrown + " ");
        }
    });
},
What am i doing wrong?