Sqlite-net 扩展关系始终为空

Fel*_*lix 3 c# mvvmcross sqlite-net sqlite-net-extensions

我正在尝试使用 MvvmCross 4 中的扩展。我想做的很简单:我有两个具有一对多关系的表,并且想要访问它。

我有两节课,BusLine并且BusLineGroup。每条 BusLine 都有一个 Group 作为外键。我在代码中所做的就是运行一个简单的 LINQ 查询来获取所有总线:

var testQuery = 
    from busLine in this._connection.Table<BusLine>()
    select busLine;
Run Code Online (Sandbox Code Playgroud)

查询本身有效,但如果我检查返回对象的字段,组始终是null!。请参阅下面的类和表定义。

调试本地变量

我究竟做错了什么?为什么总是一群人null?感谢您的帮助。


代码中的类:

    public class BusLine
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        public string Name { get; set; }
        [ForeignKey(typeof(BusLineGroup))]
        public int BusLineGroup { get; set; }
        [ManyToOne]
        public BusLineGroup LineGroup { get; set; }
    }

    public class BusLineGroup
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        public string Name { get; set; }
        public string Color { get; set; }
        public string MainStations { get; set; }
        [OneToMany(CascadeOperations = CascadeOperation.All)]
        public List<BusLine> BusLines { get; set; }

    }
Run Code Online (Sandbox Code Playgroud)

两个表:

CREATE TABLE "BusLineGroup" (
    `Id`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    `Name`  TEXT NOT NULL,
    `Color` TEXT NOT NULL,
    `MainStations`  TEXT NOT NULL
);
CREATE TABLE "BusLine" (
    `Id`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    `Name`  TEXT NOT NULL,
    `BusLineGroup`  INTEGER NOT NULL,
    FOREIGN KEY(`BusLineGroup`) REFERENCES `BusLineGroup`(`Id`)
);
Run Code Online (Sandbox Code Playgroud)

安装的 Nuget 软件包:

  • MvvmCross.Plugin.SQLitePCL
  • SQLiteNet扩展

注意: MvvmCross 包自动包含 SQLite.Net-PCL。所以这两者都使用相同的 PCL。

red*_*t84 5

您没有在那里使用任何SQLite-Net 扩展方法,您使用的是普通的 sqlite.net 方法,这些方法对您的关系一无所知。您必须使用这些WithChildren方法从数据库读取和写入关系。

例如,您的查询可以替换为以下行:

var testQuery = this._connection.GetAllWithChildren<BusLine>();
Run Code Online (Sandbox Code Playgroud)

这也将从数据库中获取第一级关系。

我建议您查看SQLite-Net Extensions文档和示例项目以获取更多示例。