小编pri*_*mus的帖子

SqliteException忙着iOS/Android Xamarin MVVMCross

在我们的Android和iOS MVVMCross应用程序中,我们偶尔会遇到SQLiteException:繁忙的异常.

鉴于下面的代码,我们有几个存储库,每个存储库构造一个下面的实例和一个与Sqlite数据库的关联连接.想象一下,我们有一个Stocks Repository和一个Valuations Repository,将创建两个SqliteDataService实例:SqliteDataService类型为Stocks,SqliteDataService类型为Valuations,每个实例都与Sqlite数据库有连接.

存储库上的操作可以在后台线程上运行,这意味着我们可能会尝试在与Valuations同时将Stocks插入数据库.

现在,每个存储库创建自己的SqliteDataService,connectionObject锁将仅保护相同的存储库类型同时访问数据库,而不是保护Stocks和Valuations同时访问数据库.

我的问题是:

每个存储库创建连接是否有效,如果是,我们如何防范SqliteException:busy?

有更好的模式吗?即我们应该创建一个跨线程共享相同连接的非泛型SqliteDataService类吗?我们尝试了这个,但在Android上我们遇到了致命的例外.

Xamarin MVVMCross有没有一个坚实的Sqlite DAL模式?

public class SqliteDataService<T> : IDataService<T> where T : new()
{
    private static object lockObject = new object();

    private static object connectionObject = new object();

    private static ISQLiteConnection _connection;

    private static SqliteDataService<T> _instance;

    public SqliteDataService(ISQLiteConnectionFactory connectionFactory, string dbPath)
    {
        if (_connection == null)
        {
            _connection = connectionFactory.Create (dbPath);
            _connection.CreateTable<T> ();
        }
    }

    public static SqliteDataService<T> GetInstance(ISQLiteConnectionFactory connectionFactory, string dbPath)
    {

        if (_instance == null)
        {
            lock (lockObject)
            { …
Run Code Online (Sandbox Code Playgroud)

sqlite android ios mvvmcross xamarin

6
推荐指数
1
解决办法
625
查看次数

标签 统计

android ×1

ios ×1

mvvmcross ×1

sqlite ×1

xamarin ×1