sqlite - 使用 MvvmCross 复制预填充的 SQLite 数据库的首选方法是什么

标签 sqlite mvvmcross

我正在修改 N-10-KittensDb 示例解决方案。 我了解如何创建 SQLite 数据库,但我希望使用现有数据库。我猜我需要将数据库复制到正确的 UI 数据文件夹中。也许它是在核心项目中完成的?如果是这样,如何将正确的路径注入(inject)正在运行的 Exec 中?由于 Core 可以跨多个 UI 使用?调用什么方法查看数据库是否存在或是否需要复制?

数据服务示例:

public DataService(ISQLiteConnectionFactory factory)
{
    const string file = "Cats.sldb";
    var connection = factory.Create(file);
    connection.CreateTable<Kitten>();
}

我认为 Android、Phone、Touch 和 Wpf 的路径不同?

请指导我使用 Cirrious.MvvmCross.Plugins.Sqlite for Phone 或 Wpf 的示例代码。

谢谢 丹

最佳答案

默认情况下,每个平台都会在适合该平台的文件夹位置创建一个数据库 - 例如触摸用途:

    public ISQLiteConnection Create(string address)
    {
        var path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        return new SQLiteConnection(Path.Combine(path, address));
    }

来自 https://github.com/slodge/MvvmCross/blob/v3/Plugins/Cirrious/Sqlite/Cirrious.MvvmCross.Plugins.Sqlite.Touch/MvxTouchSQLiteConnectionFactory.cs#L18

为了读/写文件,MvvmCross 确实捆绑了一个文件插件——这也在平台特定位置默认运行——但两者可能不完全匹配——例如见:

    protected override string FullPath(string path)
    {
        if (path.StartsWith(ResScheme))
            return path.Substring(ResScheme.Length);

        return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), path);
    }

来自 https://github.com/slodge/MvvmCross/blob/v3/Plugins/Cirrious/File/Cirrious.MvvmCross.Plugins.File.Touch/MvxTouchFileStore.cs#L22

由于这种不匹配,为了跨平台共享相同的特定于数据库的副本代码,您可能会发现在每个平台上注入(inject)您自己的特定于平台的副本更容易 - 有关注入(inject)特定于平台的服务的更多信息,请参阅 http://slodge.blogspot.co.uk/2013/06/n31-injection-platform-specific.html

关于sqlite - 使用 MvvmCross 复制预填充的 SQLite 数据库的首选方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17665669/

相关文章:

sqlite - MvvmCross异步SQLite

database - SQLite:更新相同数据时会写入磁盘吗?

java - 使用 hibernate 将日期插入到 sqlite 数据库

windows-store-apps - MvvmCross:NotImplementedException 调用 IMvxFileStore 的 EnsureFolderExists 方法

ios - Mvvm交叉/Xamarin "This class is not key value coding-compliant for the key"

c# - 是否有必要处置 MvxSubscription token ,即使我在 Android OnDestroy 方法中处置 Viewmodel

可见性绑定(bind)失败

android - 随机异常android.database.sqlite.SQLiteException : unable to open database file

Windows Phone 8 上的 SQLite

android - 创建 SQLite 数据库来存储地理点并将其读取到 MapActivity 上