Метод контроллера WebApi с SimpleInjector не добавляет записи в базу данных - PullRequest
0 голосов
/ 19 ноября 2018

В моей форме я использую ajax для отправки формы в метод моего контроллера API для создания новых объектов. В моем контроллере API я использую SimpleInjector для Dependency Injection, но по какой-то причине при нажатии этого метода мой объект не добавляется / не сохраняется в таблице базы данных. Я не получаю никаких ошибок во время выполнения, и он отлично отлаживается.

Вот мой код:

// 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);
}

1 Ответ

0 голосов
/ 19 ноября 2018

У меня есть подозрение, что 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...