我正在创建一个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>();
});
所有标准的东西。有没有其他人设法得到类似的工作?
答案 0 :(得分:2)
你的poco'Place'被称为'PlaceRealm'。我怀疑这是一个错字。 (编辑)
我怀疑Automapper正在实例化一个覆盖原始'placeRealm'对象的新对象。 也许你可以试试
ObjectMapper mapper = new ObjectMapper();
MyClass myClass = mapper.readValue(jsonAsString, MyClass.class);
代替您当前的映射。 这应该只是将值复制到已经实例化和跟踪的对象。 (无需存储返回值)。
您可能还想明确要映射哪些属性(3),因为当前Automapper将映射所有属性,包括基类中的那些属性。
另外,您可能会遇到Automapper的性能问题。我发现它是某些应用程序中的性能瓶颈。 ExpressMapper是一个不错的选择。