2014-05-22 6 views
5

Proviamo a creare un'applicazione cross platform utilizzando Xamarin in Visual Studio. Abbiamo bisogno di aggiungere il supporto sqlite per android, ios e windows phone all'interno del nostro progetto Pcl. Abbiamo aggiunto PCL Sqlite-Net tramite NuGet, ma non c'era nessuno di SQLiteDataReader, SQLiteParameter o SQLiteDataAdapter. C'è un modo per creare un Pcl con supporto mono.data.sqlite per tutte e tre le piattaforme?Come creare un PCL con supporto sqlite in un'applicazione xamarin cross platform

risposta

4

Xamarin ha un esempio decente di un programma chiamato Tasky che utilizza SQLite e PCL: http://docs.xamarin.com/guides/cross-platform/application_fundamentals/pcl/introduction_to_portable_class_libraries/

Ecco un estratto di pertinenza di SQLite e PCL:

Il Portable libreria di classi è limitato in .NET funzionalità che può supportare. Poiché è compilato per l'esecuzione su più piattaforme, non può utilizzare la funzionalità [DllImport] utilizzata in SQLite-NET. Invece SQLite-NET è implementato come una classe astratta e quindi referenziato attraverso il resto del codice condiviso. Un estratto delle API astratta è la seguente:

public abstract class SQLiteConnection : IDisposable { 

public string DatabasePath { get; private set; } 
public bool TimeExecution { get; set; } 
public bool Trace { get; set; } 
public SQLiteConnection(string databasePath) { 
    DatabasePath = databasePath; 
} 
public abstract int CreateTable<T>(); 
public abstract SQLiteCommand CreateCommand(string cmdText, params object[] ps); 
public abstract int Execute(string query, params object[] args); 
public abstract List<T> Query<T>(string query, params object[] args) where T : new(); 
public abstract TableQuery<T> Table<T>() where T : new(); 
public abstract T Get<T>(object pk) where T : new(); 
public bool IsInTransaction { get; protected set; } 
public abstract void BeginTransaction(); 
public abstract void Rollback(); 
public abstract void Commit(); 
public abstract void RunInTransaction(Action action); 
public abstract int Insert(object obj); 
public abstract int Update(object obj); 
public abstract int Delete<T>(T obj); 

public void Dispose() 
{ 
    Close(); 
} 
public abstract void Close(); 

} 

Il resto del codice condiviso utilizza la classe astratta di “store” e “recuperare” oggetti dal database. In qualsiasi applicazione che utilizza questa classe astratta, è necessario passare a un'implementazione completa che fornisca le funzionalità effettive del database.