我使用MVVMCross和SQLite-Net Extensions包来完成以下任务:
public class StockGrouping
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Description { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)] // One to many relationship with Valuation
public List<Stock> Stocks { get; set; }
}
public class Stock : IList<Valuation>
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[MaxLength(8)]
public string Symbol { get; set; }
[ForeignKey(typeof(StockGrouping))]
public int StockGroupingId { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)] // One to many relationship with Valuation
public List<Valuation> Valuations { get; set; }
#region IList implementation
#endregion
}
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; }
}
基本上我有一个整体结构,我有一组股票类别,其股票有估值。
我正在设想使用iOS分组表视图将股票分组到特定类别下。
使用SQLite-Net Extensions可以进行这种设置吗?
此时我在创建SQLite表时遇到异常:
private void CreateDataBase()
{
sqLiteConnection.CreateTable<Stock>();
sqLiteConnection.CreateTable<StockGrouping>();
sqLiteConnection.CreateTable<Valuation>();
}
它在sqLiteConnection.CreateTable()行上失败,说它不了解StockGrouping。
有什么想法吗?这甚至可以吗?
答案 0 :(得分:2)
似乎SQLite-Net不支持从IList
继承的对象。更改Stock
定义:
public class Stock : IList<Valuation>
到
public class Stock
让它在我的测试中发挥作用。
您也可以继承IEnumerable
而不是IList
,并且有效:
public class Stock : IEnumerable<Valuation>
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[MaxLength(8)]
public string Symbol { get; set; }
[ForeignKey(typeof(StockGrouping))]
public int StockGroupingId { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)] // One to many relationship with Valuation
public List<Valuation> Valuations { get; set; }
public IEnumerator<Valuation> GetEnumerator() {
return Valuations.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
return Valuations.GetEnumerator();
}
}