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

6
我正在修改N-10-KittensDb示例解决方案。 我知道如何创建SQLite数据库,但我希望使用现有的数据库。 我猜我需要将数据库复制到正确的UI数据文件夹中。也许是在Core项目中完成的?如果是这样,正确的路径是如何注入运行的Exec中的?因为Core可以在许多UI中使用?调用哪个方法来查看数据库是否存在或需要复制? 来自DataService的示例:
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的Phone或Wpf样例代码。

谢谢, Dan

1个回答

3

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

    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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接