数据库
首页 > 数据库> > sqlite-net扩展关系始终为null

sqlite-net扩展关系始终为null

作者:互联网

我正在尝试使用MvvmCross 4中的扩展名.我试图做的很简单:我有两个表,它们之间存在一对多的关系,并且想要访问它.

我有两个类,BusLine和BusLineGroup.每条总线都有一个组作为外键.我在代码中所做的是运行一个简单的LINQ查询以获取所有总线:

var testQuery = 
    from busLine in this._connection.Table<BusLine>()
    select busLine;

查询本身有效,但是如果我检查返回对象的字段,则Group始终为null!有关类和表的定义,请参见下文.

debug locals

我究竟做错了什么?为什么组总是为空?谢谢你的帮助.

代码中的类:

    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; }

    }

两张表:

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`)
);

已安装的Nuget软件包:

> MvvmCross.Plugin.SQLitePCL
> SQLiteNetExtensions

注意:MvvmCross软件包自动包含SQLite.Net-PCL.因此,这两个都使用相同的PCL.

解决方法:

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

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

var testQuery = this._connection.GetAllWithChildren<BusLine>();

这还将从数据库中获取一级关系.

我建议您看一下SQLite-Net Extensions documentationsample project了解更多示例.

标签:mvvmcross,sqlite-net,sqlite-net-extensions,c
来源: https://codeday.me/bug/20191118/2031262.html