Jongz Puangput
Jongz Puangput

Reputation: 5637

Entities Framework SaveChanges() Not Working

I have a problem when calling API for update and savechanges() is not working (the data is not update).

However, when I add Thread.Sleep(1000); the data update correctly.

Working Methods

public async Task<ResponseBaseModel> AddOrderRemark2(AddOrderRemarkRequestModel model)
{
    try
    {
        using (ChatEntities context = new ChatEntities(CurrentUsername))
        {
            List<string> statusList = getPendingStatus(context).Result;
            OrderHeader orderHeader = getOrderHerderByOrderCode(context, model.OrderCode, model.SalesChannelId).Result;

            if (statusList.Contains(orderHeader.Status))
            {
                if (orderHeader != null)
                {
                    Thread.Sleep(1000);
                    orderHeader.Remark = model.Remark;
                    context.DBEntry(orderHeader, EntityState.Modified);
                    context.SaveChanges();
                }

            }

        }
        return new ResponseBaseModel(MessageCode.OK);
    }
    catch (Exception ex)
    {
        return new ResponseBaseModel(MessageCode.Fail, ex.InnerException.Message);
    }
}

Fail Methods

public async Task<ResponseBaseModel> AddOrderRemark2(AddOrderRemarkRequestModel model)
{
    try
    {
        using (ChatEntities context = new ChatEntities(CurrentUsername))
        {
            List<string> statusList = getPendingStatus(context).Result;
            OrderHeader orderHeader = getOrderHerderByOrderCode(context, model.OrderCode, model.SalesChannelId).Result;

            if (statusList.Contains(orderHeader.Status))
            {
                if (orderHeader != null)
                {
                    orderHeader.Remark = model.Remark;
                    context.DBEntry(orderHeader, EntityState.Modified);
                    context.SaveChanges();
                }

            }

        }
        return new ResponseBaseModel(MessageCode.OK);
    }
    catch (Exception ex)
    {
        return new ResponseBaseModel(MessageCode.Fail, ex.InnerException.Message);
    }
}

Edit

I have realise that there are two APIs call at the same times from client sides. Moreover, these two APIs update on the same table 'OrderHeader' which contain both receiver info and remark that why it causes this issue!!. How can I prevent this issue guys?

        [HttpPost]
        [ActionName("AddReceiverAddress")]
        [ChatAuthentication]
        public async Task<ResponseBaseModel> AddReceiverAddress(AddReceiverAddressRequestModel model)
        {
            return _orderService.Value.AddReceiverAddress(model).Result;
        }

        [HttpPost]
        [ActionName("AddOrderRemark")]
        [ChatAuthentication]
        public async Task<ResponseBaseModel> AddOrderRemark(AddOrderRemarkRequestModel model)
        {
            return _orderService.Value.AddOrderRemark(model).Result;
        }

Upvotes: 0

Views: 495

Answers (2)

Ray Krungkaew
Ray Krungkaew

Reputation: 6965

When you call this method, did you await or Wait() for a result?

When you call the method you have to do either one of them as below sample.

await AddOrderRemark2(model);

Or

AddOrderRemark2(model).Wait();

Upvotes: 0

Ken Tucker
Ken Tucker

Reputation: 4156

You are not using async properly. Try this instead

public async Task<ResponseBaseModel> AddOrderRemark2(AddOrderRemarkRequestModel model)
{
    try
    {
        using (ChatEntities context = new ChatEntities(CurrentUsername))
        {
            List<string> statusList = await getPendingStatus(context);
            OrderHeader orderHeader = await getOrderHerderByOrderCode(context, model.OrderCode, model.SalesChannelId);

Upvotes: 3

Related Questions