System.Data.SQLiteライブラリ(バージョン1.0.83.0)とC#4.0を使用してSQLiteデータベースを使用しています。
トランザクションを使用したいのですが、次のことを実行しようとしています。
using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.Serializable }))
{
EntitiesSQLite myContext = new EntitiesSQLite();
string strSQLSongDB = "select * from Songs where IDSong = 38";
Songs mySongDB = myContext.Songs.SqlQuery(strSQLSongDB).FirstOrDefault<Songs>();
string strSQLAuthors = "select * from Authors";
List<Authors> lstAuthors = myContext.Authors.SqlQuery(strSQLAuthors).ToList<Authors>();
scope.Complete();
}
strSQLAuthorsを設定すると、曲と次の行へのパスを取得できますが、次の行で作成者を取得しようとすると、アプリケーションは、「基になるプロバイダーエラーが開きます」というエラーが発生するまで約10秒待機します。 "。
曲を取得して次の行に進むと、外部アプリケーション(SQLiteエキスパート)を使用して曲を検索しようとしますが、トランザクションがレジスタをブロックしないように曲38が表示されます。これは、次の場合に必要です。トランザクションを使用したい。
他の場合、トランザクションを使用しない場合、コンテキストの使用に問題はありませんが、この場合、他のユーザーが読み取った場合に他のユーザーが読み取れないようにレジスタをブロックする方法がわかりません。登録。
ビジネスロジックの場合、一部の操作ですべてのデータをロードする必要があります。また、処理するデータと関係のある他の新しいレジスタが作成されないようにする必要があります。
SQLiteとC#でトランザクションを使用する最良の方法を知りたいです。