Функция сохранения изменений не обновляет базу данных должным образом - PullRequest
0 голосов
/ 24 января 2019

Итак, у меня есть кнопка, которая запускает функцию javascript, которая вызывает запрос AJAX, который вызывает результат действия, который должен обновить мою базу данных.

Javascript Call

function changeDepartment() {

    // Initiate and value variables,
    var id = $('#requestId').val();
    var user = $('#contactUser').val();
    // Bind variables to data object
    var data = { id: id }
    // Ajax call with data.
    $.ajax({
        url: '@Url.Action("changeDepartmentActionResult", "ManageRequestResearch")',
        type: "POST",
        dataType: 'json',
        data: data,
        success: function (data, textStatus, XmlHttpRequest) {

            var name = data.name;

            window.location.href = '@Url.Action("Index", "ManageRequestResearch")';
            $('#btn-input').val('');
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert("responseText: " + jqXHR.responseText);
        }
    });
alert(data);

И вот, у меня есть результат действия:

[HttpPost]
public ActionResult changeDepartmentActionResult(string id)
{
    var moadEntities = new MOADEntities();
    moadEntities.Configuration.AutoDetectChangesEnabled = false;
    var researchBusiness = new ResearchRequestBusiness(moadEntities);
    var request = researchBusiness.FetchRequestById(Convert.ToInt32(id));

    var directoryObject = GetActiveDirectoryObject(request.Requestor);
    var requstorDisplayName = directoryObject != null ? directoryObject.DisplayName : request.RequestorFullName;
    var researchRequestFileBusiness = new ResearchRequestFilesBusiness(moadEntities);
    var requestFiles = researchRequestFileBusiness.FetchFilesByRequestId(Convert.ToInt32(id));

    var viewModel = new ManageSelectedRequestResearchViewModel()
    {
        RequestDetails = request,
        RequestActivity = request.tbl_ResearchRequestActivity.Select(d => d).ToList(),
        Files = requestFiles
    };

    moadEntities.Configuration.AutoDetectChangesEnabled = false;


    if (request.GovernmentEnrollment == true)
    {
        request.GovernmentEnrollment = false;
        request.ManagedCare = true;
        moadEntities.SaveChanges();
    }
    else
    {
        request.ManagedCare = false;
        request.GovernmentEnrollment = true;
        moadEntities.SaveChanges();
    }

    return Json("Status changed successfully", JsonRequestBehavior.AllowGet);
}

Из того, что я заметил, он возвращает правильную запись, правильно вносит изменения и попадает в Context.SaveChanges (); при отладке - я могу видеть до внесения изменений сохранения, что значения действительно изменились, однако - внутри базы данных изменения не сохраняются.

Кроме того, я проверил, что строки подключения действительны.

Есть идеи, что может быть причиной этого? Спасибо заранее!

1 Ответ

0 голосов
/ 24 января 2019

Кажется, что вы изменяете объект, в то время как автоматическое обнаружение изменений отключено.

Если это преднамеренно, вы должны сообщить контексту, что объект был изменен.

Я предполагаю, что MOADEntities является производным от DbContext. Так что вместо этого:

if (request.GovernmentEnrollment == true)
{
    request.GovernmentEnrollment = false;
    request.ManagedCare = true;
    moadEntities.SaveChanges();
}
else
{
    request.ManagedCare = false;
    request.GovernmentEnrollment = true;
    moadEntities.SaveChanges();
}

Я бы попробовал это:

// Simplify the if..else block
request.ManagedCare = request.GovernmentEnrollment;
request.GovernmentEnrollment = !request.GovernmentEnrollment;

// Notifying the context that the 'request' entity has been modified.
// EntityState enum is under System.Data.Entity namespace
moadEntities.Entry(request).State = EntityState.Modified;

// Now we can save the changes.
moadEntities.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...