[英]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.