gpt4 book ai didi

xamarin - 使用 Automapper 通过 Xamarin 和 C# 将对象映射到 Realm 对象

转载 作者:行者123 更新时间:2023-12-04 21:09:11 25 4
gpt4 key购买 nike

我正在创建一个 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 数据库。以下是我的 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 是一个不错的选择。

关于xamarin - 使用 Automapper 通过 Xamarin 和 C# 将对象映射到 Realm 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38234521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com