5

この他のSOの回答によると、SQLiteは外部キーの関係を自動的に強制しないようであり、これは接続ごとに明示的に有効にする必要があります。そして、これはServiceStack.OrmLiteで報告された問題です。ServiceStack.OrmLite3.9.33とSQLite1.0.84を使用して、この動作を自分で再現しました。単体テストは成功しますが(外部キー参照を使用してレコードを削除できます)、実際のアプリケーションは(合法的に)失敗します。

不明な点は、必要な「PRAGMAforeign_keys=ON;」をどこでどのように実行するかです。SQLコマンド。これにより、SQLiteユニット/統合テストのすべての接続に適用されますが、プライマリSQLServer接続には適用されません。理想的にはIDbConnectionFactory登録の一部であるように思われます。

誰か助けてもらえますか?

編集:カスケード削除はこの状況を処理する別の方法ですが、ForeignKey属性を使用してFK列にこれを正しく設定しているにもかかわらず、SQLite(ここに記載)で使用した場合、後者のサポートにもかかわらず、ServiceStack.OrmLiteはこれを尊重しないようですそれのための。これは元の問題に関連している可能性があり、SQLiteのFK強制はデフォルトで無効になっており、最初に有効にすると正しく機能します。

4

0 に答える 0