首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sqlite-net-extensions中使用Textblobbed

在sqlite-net-extensions中使用Textblobbed
EN

Stack Overflow用户
提问于 2015-09-15 17:04:09
回答 1查看 1.9K关注 0票数 4

我试图在sqlite中映射一个复杂的类,但似乎出了问题,因为当我检索我的对象时,复杂的字段是空的。简而言之,我的类是类似的:

代码语言:javascript
复制
 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有一个单独的类:

代码语言:javascript
复制
     public class PhoneNumber
     {          
        public string Number { set; get; }
        public bool IsVerified { set; get; }
        public string AttrString { set; get; }  
    }

而ContactEmail类是WinPhone的原生类。

好了,在数据库中创建了表之后:

代码语言:javascript
复制
 connection.CreateTable<Contact.PhoneNumber>();
 connection.CreateTable<Contact>();

并已填充我的联系人列表,我将他们保存在数据库中。我试着一个接一个地保存:

代码语言:javascript
复制
connection.InsertWithChildren(contact,true);

就像所有的列表一样:

代码语言:javascript
复制
connection.InsertAllWithChildren(listOfContacts, true);

我确信这个列表在保存之前是正确填充的。但是当我从sqlite读取它的值时:

代码语言:javascript
复制
var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);

我看不到PhoneNumbers和MailAddresses字段中的值,因为它们的斑点字段中填充了序列化的值。

在尝试手动反序列化blobbed字段时,我从Json.net得到了一个异常(即。这样做):

代码语言:javascript
复制
 foreach (Contact pc in list)
        {
            try
            {
                Contact.PhoneNumber[] numbs = JsonConvert.DeserializeObject<PhoneContact.PhoneNumber[]>(pc.PhoneNumbersBlobbed);
            }
            catch {
                ;
            }
        }

我说错了什么?谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-09-15 17:45:41

为了从数据库中检索关系,您必须使用SQLite-Net扩展提供的任何WithChildren方法。

尝试更改这些行:

代码语言:javascript
复制
var list = connection.Table<Contact>().ToList();
connection.UpdateAll(list ,true);

要这样做:

代码语言:javascript
复制
var list = connection.GetAllWithChildren<Contact>();

您也不需要PhoneNumber表,因为它们是在text属性中序列化的。因此,您可以删除此行:

代码语言:javascript
复制
connection.CreateTable<Contact.PhoneNumber>();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32581955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档