当我们致电coundlopicontroller.register()方法时,为什么会发生这种情况?
?- 试图使用上下文是什么?
- 试图创建上下文是什么?
- 我们如何避免这种情况?
- 我们如何调试?
"消息":"发生了错误。",
" exceptionMessage":"模型为 被创建。如果使用上下文,可能会抛出此例外 在on ModelCreating方法或同一上下文实例中 由多个线程同时访问。请注意实例成员 dbContext和相关类别不能保证为线程 安全。",
" exceptionType":" system.invalidoperationException",
" stacktrace":"
在system.web.http.apicontroller.d__1.movenext()
---堆栈跟踪的结束来自以前的位置,该位置被抛出了
在system.runtime.com.pilerservices.taskawaiter.throwfornonsuccess(任务任务)
在system.runtime.com.pilerservices.taskawaiter 。
在system.web.http.dispatcher.httpcontrollerdispatcher.d__0.movenext()"
)
问题是我们不使用MS推荐的工厂模式。
您可以使用工厂实施来获取UserManager的实例 从Owin上下文。...这是获得实例的推荐方法 usermanager根据该应用程序的请求。
结果是,"同一线程同时访问了相同的上下文实例",因为多个请求和线程共享了dbcontext。
以下是正确的。它为每个调用的usermanagerFactory函数创建了一个新实例。
UserManagerFactory
= () => new UserManager<IdentityUser>(new UserStore<IdentityUser>(new MyDbContext()));
以下是不正确的。它看起来相似,但并未为每个调用usermanagerFactory创建一个新实例。这是我们正在使用的,我们的网站破裂了。
var userStore = new UserStore<IdentityUser>(new MyDbContext());
var userManager = new UserManager<IdentityUser>(userStore);
UserManagerFactory = () => userManager;
在不正确的connectionString
的情况下,此错误也可能发生。检查connectionString
是否有效(没有错别字等)。
您是否覆盖了on ModeLcreating方法?如果是这样,您可以分享它还是整个上下文类?
如果没有,您应该注意错误消息中的以下内容
或如果多个线程同时访问相同的上下文实例。请注意,DBContext的实例成员和相关类的成员不能保证线程安全。
如果这无济于事,您是否使用Visual Studio创建的不变的Web API项目?
tl&amp; dr :如果目标是模型播种,并且您正在使用实体框架,我强烈建议您查看以下链接:https://learn.microsoft.com/en-us/ef/core/modeling/data-seeding
此链接详细介绍了如何在迁移本身期间直接播种数据。当您想在创建数据库而不是应用程序开始时要播种数据时,这通常很有用。
如果从表/视图中获取记录,请确保在DB对象上有足够的访问。
我有同样的问题,我通过执行
解决了它sp_change_users_login [ @Action = ] 'action' [ , [ @UserNamePattern = ] 'user' ] [ , [ @LoginName = ] 'login' ] [ , [ @Password = ] 'password' ] [;]
sp_change_users_login 'update_one' 'dbuser' 'dblogin'
查找更多片段和详细信息
我首先在具有MySQL的多层体系结构中使用EF代码,并且具有相同的例外,并且在DBContext类构造中使用以下行工作:
Database.SetInitializer<EntitiesName>(null);
我同意 shaun luttin 的主要答案
在我的情况下:部署后,我犯了此错误,因此我发现插入SSL证书后使用HSTS预加载。删除该线路解决了重定向,它完全解决了此误差
//app.UseHsts(options => options.MaxAge(days: 18 * 7).IncludeSubdomains().Preload());