J'essaie de parcourir plusieurs tables relancées avec SQLite-Net Extensions. Mais ça n'a pas marché. Qu'est-ce que je fais mal?Comment parcourir plusieurs tables relancées avec des extensions SQLite-Net?
foreach (var topTableItem in Database.GetAllWithChildren<TopTable>())
{
foreach (var middleTableItem in topTableItem.MiddleTableList)
{
System.Diagnostics.Debug.WriteLine(middleTableItem.Id); // The same database entry as in the working code (see below)
System.Diagnostics.Debug.WriteLine(middleTableItem.BottomTableList.Count); // Always return 0
foreach (var bottomTableItem in middleTableItem.BottomTableList)
{
System.Diagnostics.Debug.Write("It works"); // Never reached, because middleTableItem.BottomTableList.Count == 0
}
}
}
Avec "MiddleTable" comme point d'entrée, cela fonctionne:
foreach (var middleTableItem in Database.GetAllWithChildren<MiddleTable>())
{
System.Diagnostics.Debug.WriteLine(middleTableItem.Id); // The same database entry as in the not working example (see above)
System.Diagnostics.Debug.WriteLine(middleTableItem.BottomTableList.Count); // Return > 0
foreach (var bottomTableItem in middleTableItem.BottomTableList)
{
System.Diagnostics.Debug.Write("It works"); // Reached!
}
}
TopTable, avec la liste des articles MiddleTable:
public class TopTable
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Test { get; set; } = "Test";
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<MiddleTable> MiddleTableList{ get; set; } = new List<MiddleTable>();
}
MiddleTable, avec la liste des articles BottomTable:
public class MiddleTable
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Test { get; set; } = "Test";
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<BottomTable> BottomTableList { get; set; } = new List<BottomTable>();
[ForeignKey(typeof(TopTable))]
public int TopTableId{ get; set; }
[ManyToOne(CascadeOperations = CascadeOperation.All)]
public TopTable TopTable{ get; set; } = null;
}
BottomTable:
public class BottomTable
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Test { get; set; } = "Test";
[ForeignKey(typeof(MiddleTable))]
public int MiddleTableId { get; set; }
[ManyToOne(CascadeOperations = CascadeOperation.All)]
public MiddleTable MiddleTable { get; set; }
}
Avant les boucles, j'insérer les objets:
List<BottomTable> TheList { get; set; } = new List<BottomTable>();
var bottomTableObj = new BottomTable { Test = "ok" };
Database.Insert(bottomTableObj);
TheList.Add(bottomTableObj);
var middleTableObj = new MiddleTable { Test = "ok", BottomTableList = TheList.ToList() };
Database.Insert(middleTableObj);
var middleTableListTemp = new List<MiddleTable>();
middleTableListTemp.Add(middleTableObj);
var topTableObj = new TopTable {Test = "ok", MiddleLableList = middleTableList.Temp.ToList()};
Database.Insert(topTableObj);
Database.UpdateWithChildren(topTableObj);