2016-07-06 172 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