使用 SimpleInjector 的 WebApi 控制器方法不向数据库添加记录
WebApi Controller Method with SimpleInjector not adding records to database
在我的表单上,我使用 ajax 将表单提交到我的 API 控制器方法以创建新对象。在我的 API 控制器中,我使用 SimpleInjector 进行依赖注入,但由于某种原因,当该方法被命中时,我的对象没有 added/saved 到数据库 table。我没有收到任何运行时错误,并且调试完美。
这是我的代码:
// 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();
在我的表单上,我使用 ajax 将表单提交到我的 API 控制器方法以创建新对象。在我的 API 控制器中,我使用 SimpleInjector 进行依赖注入,但由于某种原因,当该方法被命中时,我的对象没有 added/saved 到数据库 table。我没有收到任何运行时错误,并且调试完美。
这是我的代码:
// 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();