usar - Use SQLiteNetextensions con Xamarin para Android-App
xamarin database sqlite (3)
Bien después de un poco de búsqueda, llegué a saber que el creador de esta extensión utilizó un patrón llamado MvvmCross mientras lo desarrollaba. Entonces, a menos que esté usando ese modelo de patrón, obtendrá este error.
Para los usuarios que no son de MvvmCross, deben reconstruir los archivos de origen y hacer referencia a ellos en su proyecto y no usar el precompilado, el que está utilizando.
Vaya a la cuarta publicación en el siguiente enlace https://forums.xamarin.com/discussion/20117/sqlite-net-extensions-and-sqliteconnection aquí y le dice cómo reconstruir desde el origen en su publicación de una manera muy breve.
Espero que lo comprendas, pero si no, espera hasta que instale Visual Studio y Xamarin y lo pruebe yo mismo para que pueda darte los pasos precisos. Tardará un tiempo, entonces hasta entonces, ¡Felicitaciones!
Aquí está el enlace a los archivos fuente https://bitbucket.org/twincoders/sqlite-net-extensions/downloads/ Haga clic en el repositorio de descargas
He leído algunos hilos sobre SQLite para Xamarin, pero todavía no puedo configurar SQLiteNetExtensions de manera adecuada. Actualmente estoy desarrollando una aplicación para Android con Target Framework Android 7.1 (API Nivel 25 - Turrón).
¿Alguien puede decirme qué estoy haciendo mal?
Instalé paquetes nuget:
Install-Package SQLiteNetExtensions -Version 2.0.0-alpha2 -Pre
Install-Package SQLite.Net-PCL -Version 3.1.1
De acuerdo con: https://bitbucket.org/twincoders/sqlite-net-extensions
Luego configuré mi código.
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; } } ...
Estas referencias fueron agregadas por nuget:
SQLite-net
SQLite.Net
SQLite.Net.Platform.XamarinAndroid
SQLiteNetExtensions
SQLitePCLRaw.Batteries_green
SQLitePCLRaw.Core
SQLitePCLRaw.lib.e_sqlite3
SQLitePCLRaw.provider.e_sqlite3
Error que ocurre:
''SQLiteConnection'' no contiene una definición para ''InsertWithChildren'' y la mejor sobrecarga del método de extensión ''WriteOperations.InsertWithChildren (SQLiteConnection, object, bool)'' requiere un receptor de tipo ''SQLiteConnection''
''SQLiteConnection'' no contiene una definición para ''GetAllWithChildren'' y la mejor sobrecarga del método de extensión ''ReadOperations.GetAllWithChildren (SQLiteConnection, Expression>, bool)'' requiere un receptor de tipo ''SQLiteConnection''
Bueno, eso es lo lejos que llego. ¿Alguien por ahí que sabe qué hacer? ¿Tal vez eliminar referencias conflictivas?
Después de algunas investigaciones descubrí que:
Install-Package SQLiteNetExtensions -Version 2.0.0-alpha2 -Pre
depende de
Install-Package sqlite-net-pcl
en lugar de
Install-Package SQLite.Net-PCL -Version 3.1.1
Pero después de eliminar todas las referencias, limpiar la solución y SQLite.net
instalar los dos paquetes necesarios, ya no hay SQLite.net
disponible. Al tratar de usar SQLite
lugar:
''SQLiteConnection'' no contiene una definición para ''InsertWithChildren'' y la mejor sobrecarga del método de extensión ''WriteOperations.InsertWithChildren (SQLiteConnection, object, bool)'' requiere un receptor de tipo ''SQLiteConnection''
Tengo curiosidad si incluso es posible desarrollar aplicaciones de Android con VS sin problemas. Dado que todo lleva años en configurarse.
EDITAR:
Bueno, después de algunos días de dolor en el a **, la solución fue utilizar el prelanzamiento aún más nuevo (alpha 3 ) al que ni siquiera se hacía referencia en las páginas oficiales. Actualmente estoy satisfecho. :)
Install-Package SQLiteNetExtensions-netstandard -Version 2.0.0-alpha3 -Pre
Espero que alguien pueda necesitar esto.
Ok, estoy seguro de que es solo un problema de versión porque acabo de probar tu código y funciona bien para mí. Intente instalar el paquete SQliteNetExtensions v 1.3.0
desde la ventana del administrador de paquetes NuGet en Visual Studio y nada más. Instalará todas sus dependencias.
Esto es lo que hice: intentar hacer lo mismo y ver si esto ayuda:
- Creé un nuevo proyecto de aplicación Android Vista única en Visual Studio (estoy usando la comunidad 2017, pero no debería importar) y creé
las Clases deStock
,Entry
yDatabase
y pegado su dado
código respectivamente. - Instalé solo el paquete
SQliteNetExtensions v 1.3.0
del Administrador de paquetes NuGet Instaló las siguientes dependencias junto con él, no las instalé yo mismo.
SQLite.Net-PCL v3.0.5
NewtonSoft.Json v6.0.8
Esto es lo que obtuve después de instalar solo el paquete SQliteNetExtensions v 1.3.0
.
Como puede ver, muestra una actualización para SQLite.Net-PCL v3.0.5
a v3.1.1
También me cansé con la actualización y todavía funciona bien, por lo que depende de usted actualizar o no.
Aquí una pequeña prueba de que está funcionando bien. También compilé y ejecuté la aplicación en el emulador y funciona todo bien.