[英]Using Textblobbed in sqlite-net-extensions
我正在嘗試在sqlite中映射一個復雜的類,但是似乎有些錯誤,因為當我檢索對象時,復雜的字段為空。 很快,我的課是類似的:
public class Contact
{
[PrimaryKey, AutoIncrement]
public int Id { set; get; }
public string Name { set; get; }
public string Status { set; get; }
[TextBlob("PhoneNumbersBlobbed")]
public List<PhoneNumber> PhoneNumbers { set; get; }
public string PhoneNumbersBlobbed { get; set; } // serialized PhoneNumbers
[TextBlob("MailAddressesBlobbed")]
public List<ContactEmail> MailAddresses { set; get; }
public string MailAddressesBlobbed { get; set; } // serialized MailAddresses
}
我顯然為PhoneNumber有一個單獨的類:
public class PhoneNumber
{
public string Number { set; get; }
public bool IsVerified { set; get; }
public string AttrString { set; get; }
}
而ContactEmail類是WinPhone的本機類。
好了,在數據庫中創建表之后:
connection.CreateTable<Contact.PhoneNumber>();
connection.CreateTable<Contact>();
並填充了我的聯系人列表,我將其保存在數據庫中。 我嘗試用以下方法一一保存:
connection.InsertWithChildren(contact,true);
作為所有清單的togheter:
connection.InsertAllWithChildren(listOfContacts, true);
並且我確定在保存列表之前,該列表已正確填充。 但是當我從sqlite讀取其值時:
var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);
我的PhoneNumbers和MailAddresses字段中沒有值,而在其blobled字段中填充了序列化的值。
沉迷於嘗試手動反序列化blobed字段,我從Json.net獲得了一個異常(即,以這種方式執行):
foreach (Contact pc in list)
{
try
{
Contact.PhoneNumber[] numbs = JsonConvert.DeserializeObject<PhoneContact.PhoneNumber[]>(pc.PhoneNumbersBlobbed);
}
catch {
;
}
}
我怎么了 謝謝
為了從數據庫檢索關系,您必須使用SQLite-Net Extensions提供的任何WithChildren
方法。
嘗試更改這些行:
var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);
對此:
var list = connection.GetAllWithChildren<Contact>();
您也不需要PhoneNumber
表,因為它們正在text屬性中進行序列化。 因此,您可以刪除以下行:
connection.CreateTable<Contact.PhoneNumber>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.