我正在Windows Store应用程序(WinRT)中实现SQLite数据库。
我想在两个表之间建立关系(1:n)
书(1)-章(n)

class Book
{
    [SQLite.AutoIncrement, SQLite.PrimaryKey]
    public int Id { get; set; }
    public String Title { get; set; }
    public String Description { get; set; }
    public String Author { get; set; }
    public List<Chapter> Chapters { get; set; }

    public Book()
    {
        this.Chapeters = new List<Chapter>();
    }
}

我懂了
-       $exception  {"Don't know about     System.Collections.Generic.List`1[Audioteka.Models.Chapter]"}    System.Exception {System.NotSupportedException}

+       [System.NotSupportedException]  {"Don't know about System.Collections.Generic.List`1[Audioteka.Models.Chapter]"}    System.NotSupportedException

+       Data    {System.Collections.ListDictionaryInternal} System.Collections.IDictionary {System.Collections.ListDictionaryInternal}
    HelpLink    null    string
    HResult -2146233067 int
+       InnerException  null    System.Exception
    Message "Don't know about System.Collections.Generic.List`1[Audioteka.Models.Chapter]"  string

我究竟做错了什么 ?

最佳答案

只是为了跟进我的评论并进行更多研究-SQLite-net不支持无法将直接映射到数据库的任何内容。有关原因,请参见here:



如果您要这样做,可以考虑使用其他ORM实际访问数据(我使用Vici Coolstorage),或者只是从类中删除List<Chapters>并将BookID字段添加到Chapters类。这就是数据库表示它的方式。

为了使用它,您可以将以下其中之一添加到您的类(class)中:

List<Chapters> Chapters {
  get {
     return db.Query<Chapters> ("select * from Chapters where BookId = ?", this.Id);
  }
}

或者
List<Chapters> Chapters {
  get {
     return db.Query<Chapters>.Where(b => b.BookId == this.Id);
  }
}

这将至少使您轻松地拉出列表,尽管那样会很慢,因为它每次访问数据库时都会命中数据库。

关于c# - 如何创建收藏集(1 :n) relation,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13145578/

10-13 03:14