Использование расширений SQLiteNetextensions с Xamarin для Android-приложений
Я читал некоторые темы о SQLite для Xamarin, но я все еще не могу правильно настроить SQLiteNetExtensions. В настоящее время я занимаюсь разработкой приложения для Android с Target Framework Android 7.1(API Level 25 - Nougat).
Кто-нибудь может сказать мне, что я делаю не так?
Я установил пакеты nuget:
Install-Package SQLiteNetExtensions -Version 2.0.0-alpha2 -Pre
Install-Package SQLite.Net-PCL -Version 3.1.1
Согласно: https://bitbucket.org/twincoders/sqlite-net-extensions
Затем я настроил свой код.
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; } } ...
Эти ссылки были добавлены nuget:
SQLite-сеть
SQLite.Net
SQLite.Net.Platform.XamarinAndroid
SQLiteNetExtensions
SQLitePCLRaw.Batteries_green
SQLitePCLRaw.Core
SQLitePCLRaw.lib.e_sqlite3
SQLitePCLRaw.provider.e_sqlite3
Возникла ошибка:
"SQLiteConnection" не содержит определения для "InsertWithChildren", а наилучшая перегрузка метода расширения "WriteOperations.InsertWithChildren (SQLiteConnection, object, bool)" требует получения типа SQLiteConnection.
"SQLiteConnection" не содержит определения для "GetAllWithChildren" и наилучшей перегрузки метода расширения "ReadOperations.GetAllWithChildren(SQLiteConnection, Expression>, bool)" требует приемник типа "SQLiteConnection"
Ну вот как далеко я доберусь. Кто-нибудь знает, что делать? Может быть, удалить конфликтующие ссылки?
4 ответа
После некоторых исследований я узнал, что:
Install-Package SQLiteNetExtensions -Version 2.0.0-alpha2 -Pre
зависит от
Install-Package sqlite-net-pcl
вместо
Install-Package SQLite.Net-PCL -Version 3.1.1
Но после удаления всех ссылок, очистки решения и переустановки двух необходимых пакетов нет SQLite.net
доступно больше. При попытке использовать SQLite
вместо:
"SQLiteConnection" не содержит определения для "InsertWithChildren", а наилучшая перегрузка метода расширения "WriteOperations.InsertWithChildren(SQLiteConnection, object, bool)" требует получения типа SQLiteConnection.
Мне любопытно, можно ли вообще без проблем разрабатывать Android-приложения с VS. Так как все занимает годы, чтобы настроить.
РЕДАКТИРОВАТЬ:
Что ж, после нескольких дней мучений в а ** решение состояло в том, чтобы использовать еще более новый предварительный релиз (альфа3), о котором даже не упоминалось на официальных страницах. На данный момент я доволен.:)
Install-Package SQLiteNetExtensions-netstandard -Version 2.0.0-alpha3 -Pre
Надеюсь, кому-нибудь это может понадобиться.
Хорошо, я уверен, что это просто проблема с версией, потому что я только что попробовал ваш код, и он отлично работает для меня. Попробуйте установить SQliteNetExtensions v 1.3.0
пакет из окна диспетчера пакетов NuGet в Visual Studio и ничего больше. Он установит все свои зависимости.
Вот что я сделал - попробуйте сделать то же самое и посмотрите, поможет ли это:
- Я создал новый проект приложения Android Single View в Visual Studio
(я использую сообщество 2017 - но это не должно иметь значения) и создал
Stock
,Entry
а такжеDatabase
Занятия и вставки дано
код соответственно. - Я установил только
SQliteNetExtensions v 1.3.0
пакет от диспетчера пакетов NuGet Вместе с ним были установлены следующие зависимости, я не устанавливал их сам.SQLite.Net-PCL v3.0.5
NewtonSoft.Json v6.0.8
Вот что я получил после установки просто SQliteNetExtensions v 1.3.0
пакет.
Как вы можете видеть, показывает обновление для SQLite.Net-PCL v3.0.5
в v3.1.1
Я устал от обновленного, и он все еще работает нормально, так что решать вам обновлять или нет.
Здесь немного доказательств того, что все работает нормально. Я также скомпилировал и запустил приложение на эмуляторе, и все отлично работает.
Хорошо, после небольшого поиска, я узнал, что создатель этого расширения использовал шаблон MvvmCross при его разработке. Поэтому, если вы не используете эту модель, вы получите эту ошибку.
Для пользователей, не являющихся пользователями MvvmCross, они должны пересобрать исходные файлы и ссылаться на них в своем проекте, а не использовать предварительно скомпилированный, который вы используете.
Перейдите к четвертому сообщению по следующей ссылке https://forums.xamarin.com/discussion/20117/sqlite-net-extensions-and-sqliteconnection здесь он в краткой манере рассказывает, как восстановить из источника в своем посте.
Надеюсь, вы поймете это, но если не подождите, я установлю Visual Studio и Xamarin и попробую сам, чтобы дать вам точные инструкции. Это займет некоторое время, так что до сих пор, слава!
Вот ссылка на исходные файлы https://bitbucket.org/twincoders/sqlite-net-extensions/downloads/ Нажмите на загрузочный репозиторий
Я только что решил эту проблему после выполнения целой загрузки обновлений. Хит те же проблемы.
- Удалите ВСЕ плагины SQLite. Смотрите прикрепленную картинку / ссылку ниже.
- Переустановите SQLiteNetExtensions, и это также установит все зависимости, фактически все файлы в этом списке, кроме SQLite.Net-PCL.
- SQLiteNetExtensions устанавливает SQLite-net-pcl, но вам нужен и другой, поэтому также установите SQLite.Net-PCL.
- Перезапустите Visual Studio, так как он не всегда подхватывает все вновь установленные пакеты, а затем снова открывает решение.
Это сработало для меня так, надеюсь, это поможет кому-то еще здесь.