Я использую расширения 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!");
}
}
}
}
Я обновлена с помощью версии NuGet. Это правильный ответ. – thedigitalsean