[英]Runtime Null Reference Exception Using SimpleInjector in WebApi Controller
[英]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.