Я пытаюсь использовать расширение в MvvmCross 4. То, что я пытаюсь сделать, просто: у меня есть две таблицы с отношением один-много и вы хотите получить к ней доступ.Sqlite-net extensions отношения всегда null
У меня есть два класса, BusLine
и BusLineGroup
. Каждая BusLine имеет одну группу в качестве внешнего ключа. Что я делаю в коде выполняется простой LINQ-запрос, чтобы получить все Шинопроводы:
var testQuery =
from busLine in this._connection.Table<BusLine>()
select busLine;
Сам запрос работает, но если я проверить поля возвращенных объектов, Группа всегда 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; }
}
Две таблицы:
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.
Не знаю, как я мог бы пропустить это ... Спасибо, сейчас он работает – Felix
Я получаю исключение с ссылкой на null, когда пытаюсь выбрать записи на основе критериев, которые отношение расширения (ManyToOne) не равно нулю. Он бросает NPE, что не имеет смысла, поскольку я только проверяю, является ли оно нулевым, а не разыменовывает его. Связано ли это с тем, что отношения еще не готовы, когда вы выбираете? –
@JamesWierzba Это звучит как другой вопрос. Вы не можете использовать отношения в своих запросах, потому что эти свойства игнорируются sqlite.net. – redent84