0

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 クライアント以上の運用環境でのみ発生するため、開発時にデバッグするのは困難です。

どんな助けでも大歓迎です!

4

1 に答える 1