我正在创建一个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是一个不错的选择.