如何调用DbContext线程安全
本文关键字:DbContext 线程 安全 调用 何调用 | 更新日期: 2023-09-27 18:05:09
我正在使用EF6,目前我偶尔得到一个错误;
Action Unhandled Exception:创建模型时不能使用上下文。如果上下文在OnModelCreating方法中使用,或者多个线程同时访问同一个上下文实例,则可能引发此异常。请注意,DbContext和相关类的实例成员不能保证是线程安全的。
我已经阅读了关于这个话题的一些有用的答案,我理解了什么是错误的基本概念,但我不确定如何准确地做出改变来解决这个问题。
我使用了一个所有其他控制器都继承的基控制器类,我在下面包含了相关的代码。我使用两个上下文,一个用于我的应用程序数据;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"));
}
}
任何关于我需要做什么改变的建议或例子将不胜感激。
自定义属性/过滤器可能导致并发问题。在你的派生控制器中有吗?