AKKA.NET 受信関数内で SaveChangesAsync を使用してデータベースに変更を保存する際に問題があります。誰かが何が起こっているのか説明できますか?
詳細: 私はこの受信ブロックを持っています:
Receive<UpdateUnitVM>((msg) => {
using (var scope = AutofacDependencyContainer.Current.CreateTenantScope(new TenantId(msg.UnitConfiguration.TenantId)))
{
var db = scope.GetService<ApplicationDbContext>();
...work on some objects inside the db context
//now save and continue with next actor using PipeTo
var continueFlags = TaskContinuationOptions.AttachedToParent & TaskContinuationOptions.ExecuteSynchronously;
db.SaveChangesAsync().ContinueWith(myint => new UnitConditionRuleGuard.UnitChanged(msg.UnitConfiguration.GetTenantUnitPair()), continueFlags).PipeTo(unitConditionRuleGuard);
}
});
このように SaveChanges を使用するようにコードを変更すると、機能します。
Receive<UpdateUnitVM>((msg) => {
using (var scope = AutofacDependencyContainer.Current.CreateTenantScope(new TenantId(msg.UnitConfiguration.TenantId)))
{
var db = scope.GetService<ApplicationDbContext>();
...work on some objects inside the db context
//now save (blocking) and continue with next actor sequentially
db.SaveChanges();
unitConditionRuleGuard.Tell(new UnitConditionRuleGuard.UnitChanged(msg.UnitConfiguration.GetTenantUnitPair()));
}
});
using-block は新しい Autofac 依存関係注入コンテナー スコープを作成するため、using ブロックが終了すると、db-object が破棄されることに注意してください。これが問題だと感じています。ただし、それについて何をすべきか、dbcontext-object の有効期間を適切に延長する方法がわかりません。