首页 > 解决方案 > 无法使上下文中的更改持续存在

问题描述

我正在开发一个简单的 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 中消失了,也没有出现在我的数据库中。有人可以解释我做错了什么吗?

标签: c#asp.net-mvcentity-frameworkn-tier-architecture

解决方案


您的 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");
    }

推荐阅读