C# 带有SimpleInjector的WebApi控制器方法不向数据库添加记录

C# 带有SimpleInjector的WebApi控制器方法不向数据库添加记录,c#,asp.net-web-api,simple-injector,C#,Asp.net Web Api,Simple Injector,在我的表单上,我使用ajax将表单提交给我的API控制器方法以创建新对象。在我的API控制器中,我使用SimpleInjector进行依赖项注入,但由于某种原因,当该方法被命中时,我的对象没有被添加/保存到数据库表中。我没有收到任何运行时错误,它可以完美地调试 这是我的密码: // POST: api/MedicInfoesApi [ResponseType(typeof(MedicInfo))] public IHttpActionResult PostMedicInfo(MedicInfo

在我的表单上,我使用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
您正在完全不同的上下文实例上调用Add和Save。因此,这些方法调用彼此独立

在第一个实例中,您添加了一条记录,但从未保存到数据库中。然后创建另一个新实例,然后告诉它保存更改,但它没有要保存的更改,因为它是一个新实例,没有对其进行任何操作

尝试将同一实例用于该操作

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

我怀疑每次调用时,
GainAccess()
都可能返回一个新的上下文实例,这可以解释这种行为

_dbContext.GainAccess().MedicInfoes.Add(medicInfo); // This instance is never saved
_dbContext.GainAccess().SaveChanges(); // This instance has nothing to save
您正在完全不同的上下文实例上调用Add和Save。因此,这些方法调用彼此独立

在第一个实例中,您添加了一条记录,但从未保存到数据库中。然后创建另一个新实例,然后告诉它保存更改,但它没有要保存的更改,因为它是一个新实例,没有对其进行任何操作

尝试将同一实例用于该操作

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

“我的对象未添加/保存到数据库”-您如何确定?您正在查看应用程序写入的数据库吗?@CodeCaster是的。当该方法完全执行时,我执行该方法应该写入的表,该表保持为空。另外,在完成我的ajax后,它会重定向到一个从该表中检索所有对象的页面,而该页面是空的。那么
GainAccess()
方法究竟是什么?“我的对象没有被添加/保存到数据库中”-您如何确定?您正在查看应用程序写入的数据库吗?@CodeCaster是的。当该方法完全执行时,我执行该方法应该写入的表,该表保持为空。另外,在完成我的ajax后,它会重定向到一个从该表中检索所有对象的页面,而该页面是空的。因此,
GainAccess()
方法究竟是什么?它起作用了!您能进一步解释一下吗?@M12Bennett您在完全不同的上下文实例上调用Add和Save。因此,这些方法调用彼此独立。在第一个实例中,您添加了一条记录,但从未保存到数据库中。然后创建另一个新实例,然后告诉它保存更改,但它没有要保存的更改,因为它是一个新实例,没有对其进行任何操作。明白。非常感谢。成功了!您能进一步解释一下吗?@M12Bennett您在完全不同的上下文实例上调用Add和Save。因此,这些方法调用彼此独立。在第一个实例中,您添加了一条记录,但从未保存到数据库中。然后创建另一个新实例,然后告诉它保存更改,但它没有要保存的更改,因为它是一个新实例,没有对其进行任何操作。明白。非常感谢。