2014-11-06 82 views
1

我創建了一個OneToOne關係基本上我有一個Client類和Address類像下面如何使用SQLite擴展

public class Client 
{ 
    [PrimaryKey, AutoIncrement] 
    public int Id { get; set; } 
    public string Description{ get; set; } 
    public string Email { get; set; } 
    public string Website { get; set; } 
    public string PhoneNumber { get; set; } 

    [ForeignKey(typeof(Address))] 
    public int AddressId { get; set;} 
    [OneToOne(CascadeOperations = CascadeOperation.All)] 
    public Address Address { get; set; } 
} 

public class Address 
{ 
    [PrimaryKey, AutoIncrement] 
    public int Id { get; set; } 
    public string Line1 {get;set;} 
    public string Line2 {get;set;} 
    public string Line3 {get;set;} 
    public string Line4 {get;set;} 
    public string Line5 {get;set;} 
    public string Line6 {get;set;} 
} 

我使用的NuGet包SQLite.Net-PCL加上SQLite的。 Net-PCL擴展,這樣我就可以基本上調用Insert並傳遞Client對象來保存客戶端,並將他們的地址保存到數據庫中。就像這樣:

_db.InsertWithChildren(clientObject); 

在我的應用程序(與MvvmCross Xamarin.iOS)我已經捆綁在一起的應用程序存在的數據庫等等,因此我並不在代碼中創建表,以便我失敗的點是在InsertWithChildren(clientObject)通話。

我試圖消除已經存在的表,然後在代碼中創建的表,表AddressClient但創造它告訴我,「不知道」的Address類型/屬性的客戶表。如果您先嚐試Client表,則會出現同樣的錯誤。我嘗試了儘可能多的變化,只是在一次調用中將地址保存到客戶端,但無濟於事。

任何人都可以對此有所瞭解嗎?

回答

1

問題引發了,因爲所有關係屬性都從SQLite-Net Ignore屬性繼承。如果使用不同的SQLite-Net版本,它將不會識別Ignore屬性,它會嘗試持續註釋的屬性,導致它崩潰並顯示您所看到的錯誤。

長話短說:您可能正在使用來自一個SQLite-Net Extensions和另一個SQLite-Net版本的數據庫連接的註釋。

如果您使用的是SQLite-Net MvvmCross社區版,則必須使用SQLite-Net Extensions MvvmCross NuGet package,而不是PCL版。

+0

當我安裝了MvvmCross 2時,如果我記得沒錯的話,SQliteConnection類會出現問題。不知道如何解決它,所以我回到了在問題中提到的PCL二。 – codingpitch 2014-11-07 11:52:25

+0

@GaryPope看到我的編輯細節 – redent84 2014-11-07 12:12:13

+0

太好了,謝謝你!我毫不懷疑這似乎是我遇到的問題。我甚至試圖明確忽略那些屬性,但它也沒有工作。你可以發表解釋作爲迴應,以便其他人可以從中受益嗎? – codingpitch 2014-11-07 13:05:53