我使用EF6,目前偶尔会出错;
操作未处理的异常:在创建模型时不能使用上下文。如果在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"));
}
}
我非常感谢任何关于我需要做出哪些改变的建议或例子。
答案 0 :(得分:0)
自定义属性/过滤器可能会导致并发问题。你的派生控制器中有没有?