2016-04-05 20 views
3

Uzantıyı MvvmCross 4'te kullanmaya çalışıyorum. Yapmaya çalıştığım şey basit: Bire çok ilişki içeren iki tablo var ve buna erişmek istiyorum.Sqlite-net uzantıları ilişkileri her zaman sıfır

İki sınıfım var, BusLine ve BusLineGroup. Her BusLine'in yabancı bir anahtar olarak bir Grubu vardır.

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

sorgu kendisi çalışır, ancak ben iade nesnelerin alanlarını kontrol ederseniz Grup null hep: Ne kodda yaptığım Buslines almak için basit bir LINQ-Sorgu çalıştırılır!. Sınıf ve tablo tanımları için aşağıya bakın. Yanlış yapıyorum

debug locals

? Grup neden her zaman null? Yardım ettiğin için teşekkür ederim. kodunda


sınıfları:

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

    } 

iki tablo:

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

yüklü Nuget-Paketler:

  • MvvmCross.Plugin.SQLitePCL
  • SQLiteNetExtensions

Not: MvvmCross paket otomatik SQLite.Net-PCL içerir. Yani bu ikisinin her ikisi de aynı PCL'yi kullanıyor.

cevap

3

SQLite-Net Uzantıları yöntemini kullanmıyorsunuz, ilişkileriniz hakkında hiçbir şey bilmeyen sade sqlite.net yöntemlerini kullanıyorsunuz. Veritabanındaki ilişkileri okumak ve yazmak için WithChildren yöntemlerini kullanmanız gerekir. Örneğin

, sizin sorgu bu hat ile değiştirilebilir: Ayrıca veritabanından birinci düzey ilişkilerini alıp bunu

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

.

Daha fazla örnek için SQLite-Net Extensions documentation ve sample project bir göz atmanızı öneririz.

+0

Bunu nasıl özleyeceğimi bilmiyorum ... Teşekkürler, şimdi çalışıyor – Felix

+0

Bir uzantı ilişkisinin (ManyToOne) boş olma ölçütlerini temel alarak kayıtları seçmeye çalıştığımda boş bir başvuru istisnası alıyorum. NPE atar, bu sadece anlamsız olup olmadığını kontrol etmemden dolayı anlamsızdır. Seçerken henüz hazır olmayan ilişkiyle ilgili bir şey var mı? –

+0

@JamesWierzba Farklı bir soru gibi geliyor. Sorgularınızdaki ilişkileri kullanamazsınız, çünkü bu özellikler sqlite.net tarafından göz ardı edilir. – redent84