0

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

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

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

                }).Start();

更新

好吧,当我将范围更新为线程时,它起作用了。是否有任何模式可以同时使用这两个范围?

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

更新

我注意到这个问题Ninject InRequestScope fallback to InThreadScope,但我使用的是 Ninject 3.0 版,它不包含StandardScopeCallbacks.Request.

4

1 回答 1

2

从您的问题中,我看到您不知道在 ASP.NET 中启动线程以使其变短的问题,IIS 可以决定随时终止该线程,从而使您的应用程序处于不一致的状态。如果此线程的执行对您的应用程序至关重要,那么要么同步执行,要么将其委托给其他进程,例如 Windows 服务,或者通过向 ASP.NET 注册来了解如何正确执行此操作

使用混合作用域不是确定性的,因为在执行线程时,http 上下文可能存在或不存在,但它可以随时释放。更好的方法是注入一些处理器类,并使用命名范围将其定义为它的关联范围,而不是新线程。

于 2012-08-17T23:48:10.043 回答