【发布时间】:2018-11-23 13:44:46
【问题描述】:
我想禁用 UserManager 的自动 SaveChanges 方法调用。我发现可以通过设置 UserStore 的 AutoSaveChanges 属性来实现。但是 .NET Core 2.1 中此类事情的最佳实践是什么?是否可以通过配置 IdentityBuilder 在 Startup.cs 中进行?
【问题讨论】:
标签: c# .net asp.net-web-api asp.net-core
我想禁用 UserManager 的自动 SaveChanges 方法调用。我发现可以通过设置 UserStore 的 AutoSaveChanges 属性来实现。但是 .NET Core 2.1 中此类事情的最佳实践是什么?是否可以通过配置 IdentityBuilder 在 Startup.cs 中进行?
【问题讨论】:
标签: c# .net asp.net-web-api asp.net-core
您需要创建一个继承Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<IdentityUser>形式的类,并在构造函数中将AutoSaveChanges设置为false,然后在AddEntityFrameworkStores之前将该类注册到IServiceCollection。
public class CustomUserStore : UserStore<IdentityUser>
{
public CustomUserStore(ApplicationDbContext context)
: base(context)
{
AutoSaveChanges = false;
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IUserStore<IdentityUser>, CustomUserStore>();
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddEntityFrameworkStores<ApplicationDbContext>();
}
【讨论】:
UserManager 依赖于由services.AddScoped<IUserStore<IdentityUser>, CustomUserStore>() 注册的IUserStore<T>