1

我正在使用 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# 使用事务的最佳方式是什么。

4

0 回答 0