C# 如何设置A->;B->;使用SQLite网络扩展的C关系

C# 如何设置A->;B->;使用SQLite网络扩展的C关系,c#,sqlite,mvvmcross,sqlite-net-extensions,C#,Sqlite,Mvvmcross,Sqlite Net Extensions,我使用MVVMCross和SQLite Net Extensions包来完成以下任务: public class StockGrouping { [PrimaryKey, AutoIncrement] public int Id { get; set; } public string Description { get; set; } [OneToMany(CascadeOperations = CascadeOperation.All)] // O

我使用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; }
}
公共类股票分组
{
[主密钥,自动增量]
公共int Id{get;set;}
公共字符串说明{get;set;}
[OneToMany(CascadeOperations=CascadeOperation.All)]//与估值的一对多关系
公开列表股票{get;set;}
}
公共类股票:IList
{
[主密钥,自动增量]
公共int Id{get;set;}
[MaxLength(8)]
公共字符串符号{get;set;}
[ForeignKey(类型(股票分组))]
public int StockGroupingId{get;set;}
[OneToMany(CascadeOperations=CascadeOperation.All)]//与估值的一对多关系
公共列表赋值{get;set;}
#区域IList实施
#端区
}
公共类估价
{
[主密钥,自动增量]
公共int Id{get;set;}
[ForeignKey(typeof(Stock))]//指定外键
public int StockId{get;set;}
公共日期时间{get;set;}
公共十进制价格{get;set;}
[MANYTONE]//与股票的多对一关系
公共股票{get;set;}
}
基本上,我有一个整体结构,我有一组股票类别,这些股票有估值

我设置它的目的是使用iOS分组表视图将股票分组到特定类别下

使用SQLite网络扩展可以进行这种设置吗

此时,我在创建SQLite表时遇到了一个异常,如下所示:

    private void CreateDataBase()
    {
        sqLiteConnection.CreateTable<Stock>();
        sqLiteConnection.CreateTable<StockGrouping>();
        sqLiteConnection.CreateTable<Valuation>();
    }
private void CreateDataBase()
{
sqLiteConnection.CreateTable();
sqLiteConnection.CreateTable();
sqLiteConnection.CreateTable();
}
它在sqLiteConnection.CreateTable()行失败,表示它不理解StockGrouping


有什么想法吗?这可能吗?

看来SQLite Net不支持从
IList
继承的对象。将
库存
定义更改为:

public class Stock : IList<Valuation>
让它在我的测试中发挥作用

您还可以从
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();
    }
}
公共类股票:IEnumerable
{
[主密钥,自动增量]
公共int Id{get;set;}
[MaxLength(8)]
公共字符串符号{get;set;}
[ForeignKey(类型(股票分组))]
public int StockGroupingId{get;set;}
[OneToMany(CascadeOperations=CascadeOperation.All)]//与估值的一对多关系
公共列表赋值{get;set;}
公共IEnumerator GetEnumerator(){
返回赋值。GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator(){
返回赋值。GetEnumerator();
}
}

给您带来了什么错误?在哪一行?您是否正在使用SQLite Net Extensions MvvmCross package()?为什么
Stock
类继承自
IList
?这不是我的代码,而是尝试从您的网站上重新编写示例,以便我们都在同一页面上。基本上我有一个父类,它包含一个类别列表,它包含一个估价列表。当我单击父类时,我试图创建一个分组的iOS表视图,其中类别描述显示为标题行,子级赋值显示在标题行下。为了为表创建我的MvxTableViewSource,我需要ItemsSource的列表形式的数据。我想拥有一个IEnumerable会让我走得更远!Offtopic,但请查看使用MvvmCross的可折叠(或不可折叠)多节表的MvvmCross代码。您甚至不需要以这种方式继承
IEnumerable
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();
    }
}