美文网首页xamarin开发技术
Xamarin.Forms Realm 使用入门

Xamarin.Forms Realm 使用入门

作者: MayueCif | 来源:发表于2017-07-21 09:12 被阅读278次

    Realm是一个移动端数据库,用来代替SQLite和ORMs。支持跨平台,本文简单介绍Realm在Xamarin.Forms中使用简单的实现一个任务列表增删改的Demo。

    添加Realm包

    Nuget中搜索Realm,选择对应包添加到项目中,其中Fody作为依赖包添加到项目中。

    成功添加包后会在项目中生成一个FodyWeavers.xml文件(前提是你项目中没有引用过Fody包)。对FodyWeavers.xml文件做如下修改:

    PCL项目需要分别为平台项目和PCL添加Realm包,Shared项目则只在平台项目中添加Realm包即可

    Model的定义

    Realm中定义Model需要继承RealmObject类,在Model类中可以像普通的C#类一样定义自己方法和事件,需要注意的是你只能在对象的创建线程中使用它,并为属性提供getterssetters。Realm中Model类必须要有一个无参数的构造函数,在Model中没有定义任何的构造函数时,编译器会自动为你添加,如果你定义了任何一个包含参数的构造函数,同时必须定义一个无参数构造函数。

    Realm中Model必须直接继承RealmObject,不支持对RealmObject子类的继承

    支持类型

    Realm提供了对基础无符号值类型的支持(bool,char,byte, short,int,long,floatdouble) ,以及stringDateTimeOffset。同时支持类似int?形式的可空类型。
    定义Realm的Model时间类型应该用DateTimeOffset代替DateTime
    IList<RealmObject>IQueryable<RealmObject>集合类型支持,定义该集合类型时,应只定义get操作否则会编译报错:

    用 IList<RealmObject> 和 RealmObject 建立诸如一对多、一对一的关系模型,使用IList时不需要初始化,Realm SDK会帮我们完成这项工作。

    特性说明

    Backlink,Ignored,Indexed,MapTo,PrimaryKey,Required

    • Backlink—— Backlink标记的属性必须是IQueryable<RealmObject>类型。当两个Model存在一对一或一对多关系时,通过Backlink实现反向链接避免手动同步出错。
    • Ignored——Model与表映射时忽略该属性,即在表中不会生成相应字段。
    • Indexed——索引属性,目前只有string,int,bool和DateTimeOffset可以设置为索引属性。查询时把索引属性作为查询条件会加快查询速度。
    • MapTo——当Model属性与表字段名不同时可以通过MapTo匹配。
    • PrimaryKey——主键,可以指定Model中唯一属性为主键且只有char,int和string类型属性可以作为主键,主键的值具有唯一性。
    • Required——表示该属性不能为空。

    For objects where you have specified a [PrimaryKey], you can pass in update: true in realm.Addto add the passed in object or update the existing one

    Create、Update、Delete操作

    Realm中所有增删改的操作都必须在事物中完成(a write transaction)。Realm提供了两种创建事务的方法Realm.BeginWrite()Realm.Write()

    • Realm.BeginWrite()返回Transaction对象,Transaction实现了Dispose接口,所以Realm.BeginWrite()通常与using代码块一起使用自动释放Transaction对象。所有操作结束后应手动调用Transaction的Commit方法提交事务。
      使用方式如下:

    • Realm.Write()参数为一个Action对象,通常传入一个lambda表达式,当lambda主体中代码执行完成没有异常时会自动提交事务。
      使用方式如下:

    更多介绍见Demo。

    Demo介绍

    TaskUser实体定义


    TaskRecord实体定义


    AddPage布局中使用DatePicker控件bindingTaskRecord的日期,DatePicker绑定的值为DateTime类型,Realm中用DateTimeOffset类型表示时间,所以必须增加一个Ignored特性标记的DateTime类型作为中间转换值。

    任务列表页定义


    任务列表页CS文件代码


    任务添加(修改)页定义


    任务添加(修改)页CS文件定义


    Demo效果图

    相关文章

      网友评论

      本文标题:Xamarin.Forms Realm 使用入门

      本文链接:https://www.haomeiwen.com/subject/erwfkxtx.html