所以,我基本上是想讓它運行多個任務,每個任務都有自己的DbContext,這樣它們不會導致異常。基本上,就像ASP.NET異步處理程序的工作方式一樣。現在我做一些事情來的多實體框架DbContext仍然導致併發異常
// set up the unity container
// WON'T WORK the dbUnitOfWork will used in two tasks.
container.RegisterType<Framework.Data.IDbUnitOfWork, Framework.Data.EntityFramework.DbUnitOfWork>(Core.IoC.Lifetime.PerThread);
container.RegisterFactory<System.Data.Entity.DbContext, ContextFactory>(o => o.Create, Framework.Core.IoC.Lifetime.Transient);
AsyncContext.Run(() => app.Run());
// run the following code fragment with an Async Context from Nito
workers.AddRange(container.resolveAll<IWorker>());
foreach (var worker in workers) {
tasks.add(worker.WorkAsync());
}
Tasks.WhenAll(tasks);
的效果,但發生的事情是,每次我不斷收到這個被詛咒的「NotSupportedException異常」,因爲第二次手術的時間開始在同一的DbContext。我試圖讓我的DbContext在Unity中成爲PerThread,但這似乎仍然不起作用。我把每線程(以及希望至少)的方式是
Tasks.Run(() => worker.WorkAsync());
我只是想能夠運行一組任務的每一個都有自己的DbContext。這樣他們都可以異步執行獨立的數據庫操作。那麼,我該如何取消這種理想的行爲。
什麼是IWorker,它在WorkAsync中有什麼作用? – DixonD
IWorker有1個方法WorkAsync返回一個Task。 – Buttink
如何將IDbUnitOfWork注入到IWorker實現中?如果你只給我們看代碼 – DixonD