2016-07-06 175 views
4

我創建一個Xamarin.iOS應用和Realm database.I想保持我的POCO對象從我RealmObject所以我所做的就是使用存儲庫模式和內部的獨立知識庫我嘗試使用AutoMapper將POCO映射到例如(子)使用Automapper映射對象領域對象與Xamarin和C#

public class PlaceRepository : IPlaceRepository 
{ 
    private Realm _realm; 

    public PlaceRepository(RealmConfiguration config) 
    { 
     _realm = Realm.GetInstance(config); 
    } 

    public void Add(Place place) 
    { 
     using (var trans = _realm.BeginWrite()) 
     { 
      var placeRealm = _realm.CreateObject<PlaceRealm>(); 
      placeRealm = Mapper.Map<Place, PlaceRealm>(place); 

      trans.Commit(); 
     } 
    } 

所以,如果我調試我的代碼一切OK映射和placeRealm填充OK,但是當我犯什麼被保存到境界分貝。以下是我RealmObject

public class PlaceRealm : RealmObject 
{ 
    [ObjectId] 
    public string Guid { get; set; } 
    public string Title { get; set; } 
    public string Notes { get; set; } 
} 

,這是我的POCO廣場​​

public class Place 
{ 
    public string Guid { get; set; } 
    public string Title { get; set; } 
    public string Notes { get; set; } 
} 

而且AutoMapper是像這樣初始化:

Mapper.Initialize(cfg => 
{ 
     cfg.CreateMap<Place, PlaceRealm>(); 
     cfg.CreateMap<PlaceRealm, Place>(); 
    }); 

所有標準的東西。有沒有人設法得到類似的工作?

+0

您的poco'Place'被稱爲'PlaceRealm'。我懷疑Automapper是實例化一個新的對象。也許你可以試試 Mapper.Map(place,placeRealm); 即不存儲返回值 –

回答

2

您的poco'Place'被稱爲'PlaceRealm'。我懷疑這是一個錯字。 (編輯)

我懷疑Automapper是實例化一個新的對象覆蓋原來的'placeRealm'對象。 也許你可以試試

Mapper.Map(place, placeRealm); 

代替你當前的映射。 它應該只是將值複製到已經安裝並跟蹤的對象。 (不需要存儲返回值)。

您可能還想明確指出您映射的屬性(3),因爲當前Automapper將映射包括基類中的所有屬性。

在附註中,您可能會遇到Automapper的性能問題。我發現它是某些應用程序的性能瓶頸。 ExpressMapper是一個不錯的選擇。

+1

仔細查看我懷疑你是對的。這似乎是因爲基類的屬性正在重置。感謝瓶頸上的領導。我會看看ExpressMapper。 – FinniusFrog