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

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

例如(子集)

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

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

最佳答案 你的poco’Place’被称为’PlaceRealm’.我怀疑这是一个错字. (编辑)

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

Mapper.Map(place, placeRealm);

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

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

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

点赞