我使用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();
}
如果您不希望对实体进行任何更改,则可以使用.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);
}