我试图在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);就像所有的列表一样:
connection.InsertAllWithChildren(listOfContacts, true);我确信这个列表在保存之前是正确填充的。但是当我从sqlite读取它的值时:
var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);我看不到PhoneNumbers和MailAddresses字段中的值,因为它们的斑点字段中填充了序列化的值。
在尝试手动反序列化blobbed字段时,我从Json.net得到了一个异常(即。这样做):
foreach (Contact pc in list)
{
try
{
Contact.PhoneNumber[] numbs = JsonConvert.DeserializeObject<PhoneContact.PhoneNumber[]>(pc.PhoneNumbersBlobbed);
}
catch {
;
}
}我说错了什么?谢谢
发布于 2015-09-15 17:45:41
为了从数据库中检索关系,您必须使用SQLite-Net扩展提供的任何WithChildren方法。
尝试更改这些行:
var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);要这样做:
var list = connection.GetAllWithChildren<Contact>();您也不需要PhoneNumber表,因为它们是在text属性中序列化的。因此,您可以删除此行:
connection.CreateTable<Contact.PhoneNumber>();https://stackoverflow.com/questions/32581955
复制相似问题