【发布时间】:2018-07-09 05:48:06
【问题描述】:
我在 ASP.NET MVC Core 2 应用程序中有一个数据库初始化方法。 在那个方法中,我使用 ApplicationDbContext 和 UserManager 来初始化数据库。 我从构造函数的依赖注入中获得了这两个实例:
public static void Initialize(ApplicationDbContext context,
UserManager<ApplicationUser> user)
我想知道的是它们是否共享相同的上下文实例,或者是否为 ApplicationDbContext 创建了一个上下文,而为 UserManager 创建了另一个上下文。 如果我执行这样的操作:
ApplicationUser adminTeacherUser = new ApplicationUser
{
UserName = "test@test.com",
Email = "test@test.com",
EmailConfirmed = true,
Name = "test",
LastName = "test",
BirthDate = null,
EntryDate = DateTime.Now
};
userManager.CreateAsync(adminTeacherUser, "password").Wait();
在 CreateAsync 调用之后立即在数据库中创建用户。
但是,如果我这样更新用户:
adminTeacherUser.Name = "other";
userManager.UpdateAsync(adminTeacherUser);
在调用 UpdateAsync 之后,数据库中没有任何更新。用户名依然是“test”。
但是,如果然后我执行:
context.SaveChanges();
应用更改并更新数据库。
那么,为什么 CreateAsync 方法“保存其更改”而不显式调用“context.SaveChanges”而 UpdateAsync 方法需要它?我通过依赖注入获得的 ApplicationDbContext 实例是否与 CreateAsync 使用的相同?
谢谢。
【问题讨论】:
-
它们在请求范围内使用相同的上下文。
-
也不要进行阻塞调用
.Wait(),在异步方法中使用await,否则会有死锁的风险。
标签: c# asp.net-core asp.net-identity