使用Automapper使用Xamarin和c#将对象映射到realm对象

时间:2016-07-06 22:02:00

标签: xamarin xamarin.ios automapper realm

我正在创建一个Xamarin.iOS应用和一个Realm数据库。我想将POCO个对象与我的RealmObject分开,所以我所做的就是使用存储库模式并在存储库中我尝试使用AutoMapper将POCO映射到RealmObject

e.g。 (子集)

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();
        }
    }

所以,如果我调试我的代码,一切都映射好,并且placeRealm填充好,但是当我提交时,没有任何东西被保存到Realm db。以下是我的RealmObject

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

这是我的POCO Place

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>();
  });

所有标准的东西。有没有其他人设法得到类似的工作?

1 个答案:

答案 0 :(得分:2)

你的poco'Place'被称为'PlaceRealm'。我怀疑这是一个错字。 (编辑)

我怀疑Automapper正在实例化一个覆盖原始'placeRealm'对象的新对象。 也许你可以试试

ObjectMapper mapper = new ObjectMapper();
MyClass myClass = mapper.readValue(jsonAsString, MyClass.class);

代替您当前的映射。  这应该只是将值复制到已经实例化和跟踪的对象。  (无需存储返回值)。

您可能还想明确要映射哪些属性(3),因为当前Automapper将映射所有属性,包括基类中的那些属性。

另外,您可能会遇到Automapper的性能问题。我发现它是某些应用程序中的性能瓶颈。 ExpressMapper是一个不错的选择。