A Xamarin Forms example using SQLite.NET-PCL with Async

UPDATE: I do not recommend this solution anymore. The SQLite library used is unmaintained, has locking issues, and does not work with Android 8 (however someone kindly sent through a PR to update Android support). I recommend this nuget package https://www.nuget.org/packages/sqlite-net-pcl/ moving forward.

It took me a while to gather information from various sources to get a working base of SQLite.NET in Xamarin Forms using all asynchronous operations, so I thought I'd whip up a small demo app showing all the plumbing in place, with basic data been added and retrieved from the database.

The solution can be found here: https://github.com/michaeldimoudis/xam-forms-sqlitenet-async

I had a lot of issues with how dates got stored in the database. Everything coming from and back to the server was in UTC, and the only way I could reliably get dates out of the SQLite database was by storing DateTime as ticks in SQLite. This is an optional parameter on SQLiteConnectionString in the iOS/Android concrete connection implementations. Also make sure you explicitly set DateTimeKind to UTC when inserting DateTime's in the SQLite database.

Another thing is, you need class level locking around your database calls, or else you risk dead locking the app. This is a must. AsyncSemaphore comes to the rescue here.

Also there was no way I could drop database tables asynchronously, it just simply didn't work. I had to always use non async connection for dropping tables.

You also might find SQLite-Net Extensions very useful, I did, and it reduced the amount of code I had to write greatly. You can find more information about it here https://bitbucket.org/twincoders/sqlite-net-extensions. I might blog about some tips and tricks of using this simple ORM at a later date.

Hope this helps getting you started :)