C# 无法使上下文中的更改保持不变
我正在开发一个简单的三层MVC应用程序,无法持续进行上下文更改。这是我的密码: 控制器:C# 无法使上下文中的更改保持不变,c#,asp.net-mvc,entity-framework,n-tier-architecture,C#,Asp.net Mvc,Entity Framework,N Tier Architecture,我正在开发一个简单的三层MVC应用程序,无法持续进行上下文更改。这是我的密码: 控制器: [HttpPost] public IActionResult Register(UserDto user) { userService.Register(user); return Ok("profile"); } 服务: public void Register(UserDto userDto) { Use
[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();
}
公共存储库(ApplicationDbContext dbContext)
{
this.dbContext=dbContext;
this.dbSet=dbContext.Set();
}
公共异步任务AddAsync(参数T[]实体)
{
等待dbSet.addRangeAncy(实体);
等待SaveChanges();
}
私有异步任务SaveChanges()
{
等待dbContext.saveChangesSync();
}
使用我的调试器,我发现dbset.addRangeAncy确实将我在请求中设置的实体添加到我的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");
}
公共异步任务寄存器(UserDto-UserDto)
{
用户=新用户();
user.FirstName=userDto.FirstName;
user.LastName=userDto.LastName;
user.Type=(UserType)userDto.Type;
等待unitOfWork.UserRepository.AddAsync(用户);
}
[HttpPost]
公共异步任务寄存器(用户到用户)
{
等待用户服务。注册(用户);
返回Ok(“配置文件”);
}
True,但这不是真正的问题SaveChanges
仍然可以工作。在控制器中,userService.Register(user)会在请求完成后执行,此时dbcontext会被处理。这里有一点,但这会引发异常,这不是OP的经验,dbset.addRangeAncy会添加实体。当我看到“saved successfully”+“not in the database”涉及localdb时,几乎总是会出现另一种localdb混乱。经过更多的调试,我发现:如果在startup.cs中的Configure方法中,我在上下文中添加了一个实体并保存了更改,那么addRangeAncy也会被保存。否则,它不会。你知道怎么做吗?我甚至不知道如何在其他SO问题上搜索此错误。您是否碰巧使用了localdb?对不起,但我不知道是否使用了localdb。对于数据库,我使用SQLServerExplorer。它在myusers/{user}文件夹中创建了一个.mdf文件。请查找有关类似localdb问题的其他问题。另外,作为一个附带条件,请查看答案并使您的代码始终保持异步。我刚刚注意到,我的解决方案中没有.mdf文件,尽管我的数据库确实存在(因为更改不会持久,所以它是空的)。如果重要的话,我正在使用EF Core。.mdf不存在是正常的还是可能是问题所在?