我该如何在动作过滤器中执行单元操作,而不要在操作中更改对象

问题描述 投票:0回答:1

我使用unitofwork模式,其生命周期是范围。我在控制器中有很多方法,将对象更改属性保存并保存,然后在actionfilter运行并记录并保存后最终返回该对象。我的问题是我在过滤器中调用的工作单元,它还保存了用户对象在行动中,我没有保存该对象。如何解决此问题

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

.net-core unit-of-work action-filter
1个回答
0
投票

如果您不希望对实体进行任何更改,则可以使用.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);
}
© www.soinside.com 2019 - 2024. All rights reserved.