6

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

来自 DataService 的示例:

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

我相信 Android vs Phone vs Touch vs Wpf 的路径是不同的?

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

谢谢丹

4

1 回答 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 确实捆绑了一个 File 插件——默认情况下它也在平台特定的位置运行——但两者可能不完全匹配——例如:

    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

于 2013-07-16T06:55:38.680 回答