SignalR で EFCore SQLite を使用しています。
多くのクライアントが同時に接続している場合、データベースは変更 (挿入/更新) できなくなり、この例外がスローされます: 「ロールバックできません - アクティブなトランザクションがありません」
クライアントは、その情報を含むクエリ パラメータで接続し、次に:
- データベースを調べて、clientName が存在する場合は、その情報を更新します。それ以外の場合は、新規追加します。
- 接続後、すべてのクライアント情報を返すクライアント名呼び出し GetData() など...
- 約 100 のクライアントが同時に接続しています。
ログ:
An exception occurred in the database while iterating the results of a query.
System.InvalidOperationException: A second operation started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe.
それで
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 5: 'database is locked'.
その後、物事を挿入または更新しようとすると:
Cannot rollback - No transaction is active
回避策はありますか? これは、50 クライアント以上の運用環境でのみ発生するため、開発時にデバッグするのは困難です。
どんな助けでも大歓迎です!