我正在使用EF6,但偶尔会遇到错误;
引用: “操作未处理异常:在创建模型时无法使用上下文。如果在OnModelCreating方法内部使用上下文或多个线程同时访问同一上下文实例,则可能抛出此异常。请注意,DbContext及其相关类的实例成员不能保证是线程安全的。”
我已经阅读了一些有用的答案here和here,并且我理解基本概念,但我不确定如何进行更改以解决此问题。
我使用一个所有其他控制器都继承的基础控制器类,下面包含了相关代码。我使用两个上下文,一个用于我的应用程序数据; DataModel,另一个用于ASP NET Identity 2.0表; ApplicationDbContext。我认为每个新请求都会实例化一个新的基础控制器,因此也是新的上下文?
非常感谢您的反馈,如果您能提供一些关于需要做出哪些改变的建议或示例,我们将不胜感激。
引用: “操作未处理异常:在创建模型时无法使用上下文。如果在OnModelCreating方法内部使用上下文或多个线程同时访问同一上下文实例,则可能抛出此异常。请注意,DbContext及其相关类的实例成员不能保证是线程安全的。”
我已经阅读了一些有用的答案here和here,并且我理解基本概念,但我不确定如何进行更改以解决此问题。
我使用一个所有其他控制器都继承的基础控制器类,下面包含了相关代码。我使用两个上下文,一个用于我的应用程序数据; DataModel,另一个用于ASP NET Identity 2.0表; ApplicationDbContext。我认为每个新请求都会实例化一个新的基础控制器,因此也是新的上下文?
public class BaseController : Controller
{
protected DataModel db = new DataModel();
/// <summary>
/// Application DB context
/// </summary>
protected ApplicationDbContext ApplicationDbContext { get; set; }
/// <summary>
/// User manager - attached to application DB context
/// </summary>
protected UserManager<ApplicationUser> UserManager { get; set; }
public BaseController()
{
this.ApplicationDbContext = new ApplicationDbContext();
this.UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(this.ApplicationDbContext));
// We need to allow the user name to also be the email address
UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false };
// Setup a token for Password Resets
var provider = Startup.DataProtectionProvider;
UserManager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(provider.Create("UserToken"));
}
}
非常感谢您的反馈,如果您能提供一些关于需要做出哪些改变的建议或示例,我们将不胜感激。
lock
。 - Amit Kumar GhoshUserStore
上下文,参见以下链接:https://dev59.com/X2Ei5IYBdhLWcg3wX7XP - 3ddLazy<T>
初始化您的上下文,并再次使用相同的上下文。 - VMAtm