I've read some threads about SQLite for Xamarin but I'm still not able to set up SQLiteNetExtensions in a proper way. I'm currently developing an android app with Target Framework Android 7.1(API Level 25 - Nougat).
Can anybody tell me what I'm doing wrong?
I installed nuget packages:
Install-Package SQLiteNetExtensions -Version 2.0.0-alpha2 -Pre
Install-Package SQLite.Net-PCL -Version 3.1.1
According to: https://bitbucket.org/twincoders/sqlite-net-extensions
Then I set up my code.
using SQLite.Net.Attributes; using SQLiteNetExtensions.Attributes; using System; namespace AppName.Resources.Model { public class Entry { [PrimaryKey, AutoIncrement] public int Id { get; set; } [ForeignKey(typeof(Stock))] public int StockId { get; set; } public DateTime Date { get; set; } public double Amount { get; set; } } }
using SQLite.Net.Attributes; using SQLiteNetExtensions.Attributes; using System; using System.Collections.Generic; namespace AppName.Resources.Model { public class Stock { [PrimaryKey, AutoIncrement] public int Id { get; set; } public string Name { get; set; } public DateTime LastUpdated { get; set; } [OneToMany(CascadeOperations = CascadeOperation.All)] public List<Entry> Entrys { get; set; } } }
using Android.Util; using AppName.Resources.Model; using SQLite.Net; using SQLite.Net.Platform.XamarinAndroid; using SQLiteNetExtensions.Extensions; using System.Collections.Generic; using System.IO; namespace AppName.Resources.DataHelper { public class DataBase { string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); public bool CreateDataBase() { try { using (var stocksDBConnection = new SQLiteConnection(new SQLitePlatformAndroid(), Path.Combine(folder, "Stock.db"))) { stocksDBConnection.CreateTable<Entry>(); stocksDBConnection.CreateTable<Stock>(); return true; } } catch (SQLiteException ex) { Log.Info("SQLiteEx", ex.Message); return false; } } public bool InsertIntoTableStock(object stock) { try { using (var stocksDBConnection = new SQLiteConnection(new SQLitePlatformAndroid(), Path.Combine(folder, "Stock.db"))) { stocksDBConnection.InsertWithChildren(stock); return true; } } catch (SQLiteException ex) { Log.Info("SQLiteEx", ex.Message); return false; } } ...
These References were added by nuget:
SQLite-net
SQLite.Net
SQLite.Net.Platform.XamarinAndroid
SQLiteNetExtensions
SQLitePCLRaw.Batteries_green
SQLitePCLRaw.Core
SQLitePCLRaw.lib.e_sqlite3
SQLitePCLRaw.provider.e_sqlite3
Occuring error:
'SQLiteConnection' does not contain a definition for 'InsertWithChildren' and the best extension method overload 'WriteOperations.InsertWithChildren(SQLiteConnection, object, bool)' requires a receiver of type 'SQLiteConnection'
'SQLiteConnection' does not contain a definition for 'GetAllWithChildren' and the best extension method overload 'ReadOperations.GetAllWithChildren(SQLiteConnection, Expression>, bool)' requires a receiver of type 'SQLiteConnection'
Well that's how far I get. Anybody out there who knows what to do? Maybe remove conflicting references?