簡體   English   中英

具有SimpleInjector的WebApi控制器方法未將記錄添加到數據庫

[英]WebApi Controller Method with SimpleInjector not adding records to database

在我的表單上,我正在使用ajax將表單提交給我的API控制器方法以創建新對象。 在我的API控制器中,我正在使用SimpleInjector進行依賴注入,但是由於某種原因,當單擊該方法時,沒有將我的對象添加/保存到數據庫表中。 我沒有收到任何運行時錯誤,並且調試完美。

這是我的代碼:

// POST: api/MedicInfoesApi
[ResponseType(typeof(MedicInfo))]
public IHttpActionResult PostMedicInfo(MedicInfo medicInfo)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    // Create empty Employee Object to get info of person being submitted via IBM
    Employee emp = new Employee();

    //check if IBM that user is submitting exists
    if (!EmployeeData.IsValidIBM(medicInfo.MedicIbm))
    {
        ModelState.AddModelError("", "This IBM does not exist!");
    }
    // Check if any existing IBM's match what the user is trying to submit... if none then save to database
    else if (_dbContext.GainAccess().MedicInfoes.Any(x => x.MedicIbm.Equals(medicInfo.MedicIbm, StringComparison.CurrentCultureIgnoreCase)))
    {
        ModelState.AddModelError("", "This person already exists!");
    }

    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    else
    {
        // Set empty Employee object with Data of person
        emp = EmployeeData.GetEmployee(medicInfo.MedicIbm);
        medicInfo.Active = true;
        _dbContext.GainAccess().MedicInfoes.Add(medicInfo); // no errors but nothing is added
        _dbContext.GainAccess().SaveChanges(); // no errors but nothing saves
    }

    return CreatedAtRoute("DefaultApi", new { id = medicInfo.Id }, medicInfo);
}

我懷疑GainAccess()可能會在每次調用上下文時返回一個新的上下文實例,這可以解釋行為。

_dbContext.GainAccess().MedicInfoes.Add(medicInfo); // This instance is never saved
_dbContext.GainAccess().SaveChanges(); // This instance has nothing to save

您在完全不同的上下文實例上調用添加和保存。 因此,這些方法調用是相互獨立的。

在第一個實例中,您添加了一條記錄,但從未將其保存到數據庫中。 然后,您創建另一個新實例,然后告訴它保存更改,但是它沒有要保存的更改,因為它是一個沒有執行任何操作的新實例。

嘗試對該操作使用相同的實例。

medicInfo.Active = true;
var context = _dbContext.GainAccess(); //what ever it returns.
context.MedicInfoes.Add(medicInfo);
context.SaveChanges();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM