2

我正在使用 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 扩展可以进行这种设置吗?

在这一点上,当我像这样创建我的 SQLite 表时,我遇到了一个异常:

    private void CreateDataBase()
    {
        sqLiteConnection.CreateTable<Stock>();
        sqLiteConnection.CreateTable<StockGrouping>();
        sqLiteConnection.CreateTable<Valuation>();
    }

它在 sqLiteConnection.CreateTable() 行上失败,说它不理解 StockGrouping。

有任何想法吗?这甚至可能吗?

4

1 回答 1

3

似乎 SQLite-Net 不支持从IList. 从以下更改Stock定义:

public class Stock : IList<Valuation>

public class Stock

使它在我的测试中起作用。

您也可以继承 fromIEnumerable而不是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();
    }
}
于 2014-11-05T09:33:20.397 回答