Multithreading 实体框架不使用Ninject更新另一个线程中的实体

Multithreading 实体框架不使用Ninject更新另一个线程中的实体,multithreading,entity-framework,entity-framework-4.1,ninject,code-first,Multithreading,Entity Framework,Entity Framework 4.1,Ninject,Code First,我遇到EF无法在另一个线程中更新对象的问题。我能够检索对象,但当我调用UnitOfWork.Commit()时,SQL Server探查器不显示正在更新的项。如果我在线程外按顺序运行它,那么它可以正常工作。有什么想法吗 new Thread(() => { var divisionBracketsService = DependencyResolver.Current.GetService<IDivisionB

我遇到EF无法在另一个线程中更新对象的问题。我能够检索对象,但当我调用
UnitOfWork.Commit()时,SQL Server探查器不显示正在更新的项。如果我在线程外按顺序运行它,那么它可以正常工作。有什么想法吗

 new Thread(() =>
                {
                    var divisionBracketsService = DependencyResolver.Current.GetService<IDivisionBracketsService>();

                    if (divisionBracketsService != null)
                        divisionBracketsService.ProcessGame(gameId);

                }).Start();
新线程(()=>
{
var divisionBracketsService=DependencyResolver.Current.GetService();
if(divisionBracketsService!=null)
分区BracketsService.ProcessGame(gameId);
}).Start();
更新

当我将作用域更新为线程时,它起了作用。是否存在使用这两个作用域的模式

kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>().InThreadScope();
kernel.Bind().To().InThreadScope();
更新


我注意到这个问题,但我使用的是Ninject的3.0版,它不包含
StandardScopeCallbacks。从您的问题中请求

,我发现您没有意识到在ASP.NET中启动线程以使其简短化的问题,IIS可以随时决定终止该线程,使应用程序处于不一致状态。如果此线程的执行对您的应用程序至关重要,请同步执行,将其委托给其他进程,例如windows服务,或者通过注册ASP.NET获得正确执行此线程的诀窍

使用混合作用域是不确定的,因为在执行线程时,http上下文可能存在或不存在,但可以随时显示。更好的方法是注入一些处理器类,并使用命名的作用域(而不是新建线程)将其定义为dedencies的作用域