c# - 无法使上下文中的更改持续存在
问题描述
我正在开发一个简单的 3 层 MVC 应用程序,并且无法使上下文更改持续存在。这是我的代码:
控制器:
[HttpPost]
public IActionResult Register(UserDto user)
{
userService.Register(user);
return Ok("profile");
}
服务:
public void Register(UserDto userDto)
{
User user = new User();
user.FirstName = userDto.FirstName;
user.LastName = userDto.LastName;
user.Type = (UserType) userDto.Type;
unitOfWork.UserRepository.AddAsync(user);
}
存储库:
public Repository(ApplicationDbContext dbContext)
{
this.dbContext = dbContext;
this.dbSet = dbContext.Set<T>();
}
public async Task AddAsync(params T[] entities)
{
await dbSet.AddRangeAsync(entities);
await SaveChanges();
}
private async Task SaveChanges()
{
await dbContext.SaveChangesAsync();
}
使用我的调试器,我发现 dbset.AddRangeAsync 确实将我在请求中设置的实体添加到我的 dbContext 中。问题是,在下一个请求中,实体从 dbContext 中消失了,也没有出现在我的数据库中。有人可以解释我做错了什么吗?
解决方案
您的 add 方法是异步的。调用此方法的其他方法必须是异步的。
public async Task Register(UserDto userDto)
{
User user = new User();
user.FirstName = userDto.FirstName;
user.LastName = userDto.LastName;
user.Type = (UserType) userDto.Type;
await unitOfWork.UserRepository.AddAsync(user);
}
[HttpPost]
public async Task<IActionResult> Register(UserDto user)
{
await userService.Register(user);
return Ok("profile");
}
推荐阅读
- android - Android 崩溃:无法实例化活动
- android - SearchView 的 Activity 用左箭头关闭
- performance - Matlab:加快“为 ND 数组中的每个元素查找()”
- java - Spring Boot:全局设置休眠序列
- ffmpeg - 透视校正示例
- reactjs - 如何在 react-grid-layout 中为 gridItem 设置 lockAspectRatio
- javascript - 如何在不显示 html 标记的情况下过滤和标记输入中的单词?
- python - 解析命令行参数时出现 KeyError
- reactjs - React Native 地图追踪
- nlp - 云 TPU 上的 Flair NLP 包