【发布时间】:2020-05-31 07:58:53
【问题描述】:
我正在开发一个简单的 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 中消失了,也没有出现在我的数据库中。有人可以解释我做错了什么吗?
【问题讨论】:
-
你碰巧用过localdb吗?
-
对不起,我不知道我是否使用localdb。对于数据库,我使用 SQLServerExplorer。它在我的 Users/{user} 文件夹中创建了一个 .mdf 文件。
-
是的,localdb。请寻找有关类似 localdb 问题的其他问题。另外,作为一个附带问题,请查看答案并使您的代码始终异步。
-
我刚刚注意到我的解决方案中没有 .mdf 文件,尽管我的数据库确实存在(它是空的,因为更改不会持续存在)。如果重要,我正在使用 EF Core。 .mdf 不存在是正常的还是这可能是问题所在?
标签: c# asp.net-mvc entity-framework n-tier-architecture