Как я могу сделать, чтобы юнит-работа в actionfilter не сохраняла объекты, измененные в действии - PullRequest
1 голос
/ 09 апреля 2020

Я использую шаблон unitofwork, и его жизненный цикл - это область. У меня есть много методов, как показано ниже в моем контроллере. Я привожу свойство изменения объекта и сохраняю его, затем возвращаю этот объект, наконец, после того, как afteractionfilter запустится и войдет в систему и сохранит его. Моя проблема в том, что unitofwork, который я вызвал в filter.It, также сохраняет объект пользователя, который я не могу сохранить этот объект. Как я могу решить эту проблему

public IActionResult ReadUserProfileImage(string id) {

     IActionResult response = BadRequest();

     var user =  unitOfWork.User.FirstOrtDefault(u=>u.id==id);
     user.Name="New name";
     return Ok(user);
}

public override void OnActionExecuted(ActionExecutedContext filterContext) {

     unitOfWork.Logs.Add(new CoreHelper.Core.Domain.Log() {
          User = user,
          ResultType = resultType,
          Time = time,
          Controller = controller,
          Action = action,
          Request = requestJson,
          Response = responseJson,
          Ip = ip.ToString(),
          PcName = pcName,
          Url = url,
          ProcessTime = processTime,
          LogCaption = logCaption,
          LogDetail = logDetail,
          IsBefore = isBefore
     });

     unitOfWork.Save();
}

1 Ответ

0 голосов
/ 11 апреля 2020

Если вам не нужны какие-либо изменения, которые вы можете внести в Entity, вы можете использовать опцию .AsNoTracking().

public IActionResult ReadUserProfileImage(string id) {

     IActionResult response = BadRequest();

     var user =  unitOfWork.User.AsNoTracking().FirstOrtDefault(u=>u.id==id);
     user.Name="New name";
     return Ok(user);
}
...