2013-07-15 7 views
6

Sto modificando la soluzione campione N-10-KittensDb. I Vedi come creare un database SQLite, ma desidero utilizzare un database esistente. Sto indovinando che ho bisogno di copiare il database nella cartella dati UI corretta. Forse è fatto all'interno del progetto Core? E se sì, come viene iniettato il percorso corretto nell'esecuzione di Exec? Come il Core può essere utilizzato su molte UI? Quale metodo è chiamato per vedere se il database esiste o deve essere copiato?Con MvvmCross qual è il modo preferito per copiare un database SQLite precompilato

d'esempio della DataService:

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

credo che i percorsi sono diversi per Android vs Phone VS Touch vs WPF?

Prego indirizzarmi a un esempio di codice che utilizza Cirrious.MvvmCross.Plugins.Sqlite per Phone o Wpf.

Grazie Dan

risposta

3

Ogni piattaforma di default crea un database in una posizione cartella appropriata per la piattaforma - per esempio Touch utilizza:

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

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

Per leggere/scrivere file, MvvmCross fa impacchettare un plugin File - questo funziona anche per impostazione predefinita in posizioni specifiche di piattaforma - ma i due non può corrispondere perfettamente - per esempio vedi:

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

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

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

A causa di questa mancata corrispondenza, al fine di condividere lo stesso codice di copia-banca dati attraverso le piattaforme si possono trovare più facile iniettare solo la vostra copia specifica piattaforma su ogni piattaforma - per ulteriori informazioni sull'iniezione di servizi specifici per piattaforma, vedere http://slodge.blogspot.co.uk/2013/06/n31-injection-platform-specific.html

Problemi correlati