Sha*_*tin 43 c# asp.net multithreading entity-framework asp.net-identity
当我们调用AccountApiController.Register()方法时,为什么会发生这种情况?
"消息":"发生错误.",
"ExceptionMessage":"在创建模型时不能使用上下文.如果在OnModelCreating方法中使用上下文,或者同时由多个线程访问相同的上下文实例,则可能抛出此异常.请注意DbContext的实例成员和相关的类不保证是线程安全的.",
"ExceptionType": "System.InvalidOperationException"
"堆栈跟踪":"
在System.Web.Http.ApiController.d__1.MoveNext()
---从抛出异常的先前位置开始的堆栈跟踪结束
在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskAwaiter .HandleNonSuccessAndDebuggerNotification(任务>任务)
在System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext()"
Raf*_*cer 25
如果不正确,也可能发生此错误connectionString.检查是否connectionString有效(没有拼写错误等).
Sha*_*tin 24
问题是我们没有使用MS建议的工厂模式.
您可以使用Factory实现从OWIN上下文获取UserManager的实例....这是针对应用程序的每个请求获取UserManager实例的推荐方法.
结果,"同时上下文实例由多个线程访问",因为多个请求和线程共享一个DbContext.
以下是正确的.它为每次调用UserManagerFactory函数创建一个新的MyDbContext实例.
UserManagerFactory
= () => new UserManager<IdentityUser>(new UserStore<IdentityUser>(new MyDbContext()));
Run Code Online (Sandbox Code Playgroud)
以下是不正确的.它看起来很相似,但不会为每次调用UserManagerFactory创建一个新实例.这是我们正在使用的,我们的网站打破了.
var userStore = new UserStore<IdentityUser>(new MyDbContext());
var userManager = new UserManager<IdentityUser>(userStore);
UserManagerFactory = () => userManager;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86769 次 |
| 最近记录: |