Xamarin.Forms Realm 使用入門

Realm是一個(gè)移動端數(shù)據(jù)庫,用來代替SQLite和ORMs缎脾。支持跨平臺从绘,本文簡單介紹Realm在Xamarin.Forms中使用簡單的實(shí)現(xiàn)一個(gè)任務(wù)列表增刪改的Demo访忿。

添加Realm包

Nuget中搜索Realm凿掂,選擇對應(yīng)包添加到項(xiàng)目中伴榔,其中Fody作為依賴包添加到項(xiàng)目中。

成功添加包后會在項(xiàng)目中生成一個(gè)FodyWeavers.xml文件(前提是你項(xiàng)目中沒有引用過Fody包)庄萎。對FodyWeavers.xml文件做如下修改:

PCL項(xiàng)目需要分別為平臺項(xiàng)目和PCL添加Realm包踪少,Shared項(xiàng)目則只在平臺項(xiàng)目中添加Realm包即可

Model的定義

Realm中定義Model需要繼承RealmObject類,在Model類中可以像普通的C#類一樣定義自己方法和事件糠涛,需要注意的是你只能在對象的創(chuàng)建線程中使用它援奢,并為屬性提供getterssetters。Realm中Model類必須要有一個(gè)無參數(shù)的構(gòu)造函數(shù)忍捡,在Model中沒有定義任何的構(gòu)造函數(shù)時(shí)集漾,編譯器會自動為你添加,如果你定義了任何一個(gè)包含參數(shù)的構(gòu)造函數(shù)砸脊,同時(shí)必須定義一個(gè)無參數(shù)構(gòu)造函數(shù)具篇。

Realm中Model必須直接繼承RealmObject,不支持對RealmObject子類的繼承

支持類型

Realm提供了對基礎(chǔ)無符號值類型的支持(bool,char,byte, short,int,long,floatdouble) 脓规,以及stringDateTimeOffset栽连。同時(shí)支持類似int?形式的可空類型险领。
定義Realm的Model時(shí)間類型應(yīng)該用DateTimeOffset代替DateTime侨舆。
IList<RealmObject>IQueryable<RealmObject>集合類型支持,定義該集合類型時(shí)绢陌,應(yīng)只定義get操作否則會編譯報(bào)錯(cuò):

用 IList<RealmObject> 和 RealmObject 建立諸如一對多挨下、一對一的關(guān)系模型,使用IList時(shí)不需要初始化脐湾,Realm SDK會幫我們完成這項(xiàng)工作臭笆。

特性說明

Backlink,Ignored,Indexed,MapTo,PrimaryKey,Required

  • Backlink—— Backlink標(biāo)記的屬性必須是IQueryable<RealmObject>類型。當(dāng)兩個(gè)Model存在一對一或一對多關(guān)系時(shí),通過Backlink實(shí)現(xiàn)反向鏈接避免手動同步出錯(cuò)愁铺。
  • Ignored——Model與表映射時(shí)忽略該屬性鹰霍,即在表中不會生成相應(yīng)字段。
  • Indexed——索引屬性茵乱,目前只有string,int,bool和DateTimeOffset可以設(shè)置為索引屬性茂洒。查詢時(shí)把索引屬性作為查詢條件會加快查詢速度。
  • MapTo——當(dāng)Model屬性與表字段名不同時(shí)可以通過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提供了兩種創(chuàng)建事務(wù)的方法Realm.BeginWrite()Realm.Write()送巡。

  • Realm.BeginWrite()返回Transaction對象赞辩,Transaction實(shí)現(xiàn)了Dispose接口,所以Realm.BeginWrite()通常與using代碼塊一起使用自動釋放Transaction對象授艰。所有操作結(jié)束后應(yīng)手動調(diào)用Transaction的Commit方法提交事務(wù)辨嗽。
    使用方式如下:

  • Realm.Write()參數(shù)為一個(gè)Action對象,通常傳入一個(gè)lambda表達(dá)式淮腾,當(dāng)lambda主體中代碼執(zhí)行完成沒有異常時(shí)會自動提交事務(wù)糟需。
    使用方式如下:

更多介紹見Demo。

Demo介紹

TaskUser實(shí)體定義


TaskRecord實(shí)體定義


AddPage布局中使用DatePicker控件bindingTaskRecord的日期谷朝,DatePicker綁定的值為DateTime類型洲押,Realm中用DateTimeOffset類型表示時(shí)間,所以必須增加一個(gè)Ignored特性標(biāo)記的DateTime類型作為中間轉(zhuǎn)換值圆凰。

任務(wù)列表頁定義


任務(wù)列表頁CS文件代碼


任務(wù)添加(修改)頁定義


任務(wù)添加(修改)頁CS文件定義


Demo效果圖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杈帐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子专钉,更是在濱河造成了極大的恐慌挑童,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跃须,死亡現(xiàn)場離奇詭異站叼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)菇民,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門尽楔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來投储,“玉大人,你說我怎么就攤上這事阔馋÷贶瘢” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵呕寝,是天一觀的道長冲泥。 經(jīng)常有香客問我,道長壁涎,這世上最難降的妖魔是什么凡恍? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮怔球,結(jié)果婚禮上嚼酝,老公的妹妹穿的比我還像新娘。我一直安慰自己竟坛,他們只是感情好闽巩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著担汤,像睡著了一般涎跨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上崭歧,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天隅很,我揣著相機(jī)與錄音,去河邊找鬼率碾。 笑死叔营,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的所宰。 我是一名探鬼主播绒尊,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仔粥!你這毒婦竟也來了婴谱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤躯泰,失蹤者是張志新(化名)和其女友劉穎谭羔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斟冕,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡口糕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磕蛇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片景描。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖秀撇,靈堂內(nèi)的尸體忽然破棺而出超棺,到底是詐尸還是另有隱情,我是刑警寧澤呵燕,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布棠绘,位于F島的核電站,受9級特大地震影響再扭,放射性物質(zhì)發(fā)生泄漏氧苍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一泛范、第九天 我趴在偏房一處隱蔽的房頂上張望让虐。 院中可真熱鬧,春花似錦罢荡、人聲如沸赡突。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惭缰。三九已至,卻和暖如春笼才,著一層夾襖步出監(jiān)牢的瞬間漱受,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工骡送, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拜效,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓各谚,卻偏偏與公主長得像紧憾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子昌渤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容