Fin*_*rog 5 realm automapper xamarin.ios xamarin
我正在创建一个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();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我调试代码,则所有内容都将映射为OK,并且将RealRealm填充为OK,但是当我提交时,任何内容都不会保存到Realm数据库中。以下是我的RealmObject
public class PlaceRealm : RealmObject
{
[ObjectId]
public string Guid { get; set; }
public string Title { get; set; }
public string Notes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的POCO地方
public class Place
{
public string Guid { get; set; }
public string Title { get; set; }
public string Notes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
AutoMapper的初始化如下:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Place, PlaceRealm>();
cfg.CreateMap<PlaceRealm, Place>();
});
Run Code Online (Sandbox Code Playgroud)
所有标准的东西。有没有其他人设法使类似的工作?
您的 poco“Place”称为“PlaceRealm”。我怀疑这是一个错字。(已编辑)
我怀疑 Automapper 正在实例化一个新对象,覆盖您原来的“placeRealm”对象。也许你可以尝试
Mapper.Map(place, placeRealm);
Run Code Online (Sandbox Code Playgroud)
代替您当前的映射。它应该只是将值复制到已经启动和跟踪的对象中。(不需要存储返回值)。
您可能还想明确要映射的属性 (3),因为当前 Automapper 将映射所有属性,包括基类中的属性。
另外,您可能会遇到 Automapper 的性能问题。我发现它是某些应用程序的性能瓶颈。ExpressMapper 是一个不错的选择。
| 归档时间: |
|
| 查看次数: |
1462 次 |
| 最近记录: |