sqlite-net扩展关系始终为null
作者:互联网
我正在尝试使用MvvmCross 4中的扩展名.我试图做的很简单:我有两个表,它们之间存在一对多的关系,并且想要访问它.
我有两个类,BusLine和BusLineGroup.每条总线都有一个组作为外键.我在代码中所做的是运行一个简单的LINQ查询以获取所有总线:
var testQuery =
from busLine in this._connection.Table<BusLine>()
select busLine;
查询本身有效,但是如果我检查返回对象的字段,则Group始终为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; }
}
两张表:
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 documentation和sample project了解更多示例.
标签:mvvmcross,sqlite-net,sqlite-net-extensions,c 来源: https://codeday.me/bug/20191118/2031262.html