我对使用 SQlite-Net 扩展很感兴趣(https://bitbucket.org/twincoders/sqlite-net-extensions) 与 Xamarin 表单。我正在使用 Visual Studio 2013、NuGet 的 SQlite.Net PCL 2.3.0 和一个空白的 Hello World Xamarin Forms PLC 项目。作为第一步,我试图从 Sqlite.Net 扩展站点中获取示例。根据 Xamarin 网站上的建议方法,我使用 DependencyService 来获取 SQLIteConnection。但是,我的代码甚至无法编译,因为它在 SQLiteConnection 上找不到 UpdateWithChildren 或 GetWithChildren 方法。很明显,我的 SQLiteConnection 对象没有与示例相同的所有内容。我是否为 SQLite.Net PCL 使用了错误的库?Xamarin 和 SQLite-Net 扩展都建议使用 NuGet 的 PCL 版本,这就是我认为我所拥有的......
我在 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; }
}
}
这是我的数据库助手。现在我只是在构造函数中运行一个测试。我得到的错误是找不到方法 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!");
}
}
}
}