2

Я использую расширения SQlite-Net (https://bitbucket.org/twincoders/sqlite-net-extensions) с форматами Xamarin. Я использую Visual Studio 2013, SQlite.Net PCL 2.3.0 от NuGet и пустой проект Hello World Xamarin Forms PLC. В качестве первого шага я пытаюсь просто получить пример с сайта расширения Sqlite.Net. Согласно предложенному методу на веб-сайте Xamarin я использую DependencyService для получения SQLIteConnection. Однако мой код даже не компилируется, поскольку он не может найти методы UpdateWithChildren или GetWithChildren на SQLiteConnection. Кажется очевидным, что мой объект SQLiteConnection не имеет ничего общего с примером. Я использую неправильную библиотеку для SQLite.Net PCL? Оба Xamarin и SQLite-Net Extensions предложил использовать версию PCL из NuGet, что то, что я думаю, что у меня есть ...Пример расширения SQLite-Net для форм Xamarin

я это разместил на форуме Xamarin, а здесь: http://forums.xamarin.com/discussion/20117/sqlite-net-extensions-and-sqliteconnection#latest

Вот мой кода (за исключением класса ISQLite). Модели данных:

using SQLiteNetExtensions.Attributes; 
using SQLite.Net.Attributes; 


namespace Sample.Models 
{ 
    public class Stock 
    { 
     [PrimaryKey, AutoIncrement] 
     public int Id { get; set; } 
     [MaxLength(8)] 
     public string Symbol { get; set; } 

     [OneToMany]  // One to many relationship with Valuation 
     public List<Valuation> Valuations { get; set; } 
    } 

    public class Valuation 
    { 
     [PrimaryKey, AutoIncrement] 
     public int Id { get; set; } 

     [ForeignKey(typeof(Stock))]  // Specify the foreign key 
     public int StockId { get; set; } 
     public DateTime Time { get; set; } 
     public decimal Price { get; set; } 

     [ManyToOne]  // Many to one relationship with Stock 
     public Stock Stock { get; set; } 
    } 
} 

А вот мой DatabaseHelper. Прямо сейчас я просто запускаю тест прямо в конструкторе. Ошибка, которую я получаю, заключается в том, что методы UpdateWithChildren и GetWithChildren не найдены.

using Sample.Models; 
using SQLite.Net; 
using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Xamarin.Forms; 

namespace Sample.Orm 
{ 
    class DatabaseHelper 
    { 
     private SQLiteConnection db; 

     public DatabaseHelper() 
     { 
      db = DependencyService.Get<ISQLite>().GetConnection(); 
      //Create the tables 

      db.CreateTable<Stock>(); 
      db.CreateTable<Valuation>(); 

      var euro = new Stock() 
      { 
       Symbol = "€" 
      }; 
      db.Insert(euro); // Insert the object in the database 

      var valuation = new Valuation() 
      { 
       Price = 15, 
       Time = DateTime.Now, 
      }; 
      db.Insert(valuation); // Insert the object in the database 

      // Objects created, let's stablish the relationship 
      euro.Valuations = new List<Valuation> { valuation }; 

      db.UpdateWithChildren(euro); // Update the changes into the database 
      if (valuation.Stock == euro) 
      { 
       Debug.WriteLine("Inverse relationship already set, yay!"); 
      } 

      // Get the object and the relationships 
      var storedValuation = db.GetWithChildren<Valuation>(valuation.Id); 
      if (euro.Symbol.Equals(storedValuation.Stock.Symbol)) 
      { 
       Debug.WriteLine("Object and relationships loaded correctly!"); 
      } 
     } 
    } 
} 

ответ

3

Расширения SQLite-Net теперь доступны в виде пакетов NuGet для MvvmCross и стандартных PCL-компонентов SQLite-Net. Это должно устранить такие проблемы, когда библиотека была скомпилирована с одной версией SQLite-Net, но выполнена с другой, что может вызвать проблемы, которые вы описываете.

Ссылки:

+0

Я обновлена ​​с помощью версии NuGet. Это правильный ответ. – thedigitalsean

0

Jon Goldberger от поддержки Xamarin указал мне в правильном направлении. Для тех, кто находит этот пост в будущем, короткое решение состоит в том, что если вы не используете MvvmCross, вам нужно построить SQLite-Net Extensions из исходного кода, не используйте предварительно скомпилированную dll. Как только вы выйдете из своего сервера git, вам нужно добавить SQLiteNetExtensions-PCL.csproj, восстановить его пакеты с помощью Project-> Restore Packages, а затем ссылаться на проект SQLiteNetExtensions-PCL из вашего базового проекта.

0

Вот класс полностью уточнят (пространство имен и метод).
Просто добавил:

SQL Lite Extensions

SQLiteNetExtensions.Extensions.ReadOperations.GetAllWithChildren() 
SQLiteNetExtensions.Extensions.WriteOperations.UpdateWithChildren() 
Смежные вопросы