繁体   English   中英

在sqlite-net扩展中使用Textblobbed

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM