[英]Make automapper cache the object if met more than once
是否有任何方法可以使automapper不克隆相同的對象,而是使用單個對象(如果在層次結構中多次遇到它)?
基本上,我有一大堆不同的對象,它們都引用同一個對象。 當我使用AutoMapper映射此集合時,它會生成一個對象數組,其中每個對象都引用一個新的克隆對象。 所有這些克隆的對象不再等於引用。 這最終導致我的內存不足問題。
有沒有辦法為AutoMapper配置某種緩存?
我在AutoMapper配置中嘗試過.PreserveReferences()
,但這並不是我想要的。 我認為這僅適用於循環引用。
更新。
代碼示例我測試.PreserveReferences()
。
[TestMethod]
public void TestMethod1()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<A, MA>().PreserveReferences();
cfg.CreateMap<B, MB>();
});
var b = new B();
var a1 = new A() { Ref = b };
var a2 = new A() { Ref = b };
Assert.AreNotSame(a1, a2);
Assert.AreSame(a1.Ref, a2.Ref);
var ma1 = Mapper.Map<MA>(a1);
var ma2 = Mapper.Map<MA>(a2);
Assert.AreNotSame(ma1, ma2);
Assert.AreSame(ma1.Ref, ma2.Ref); // This fails.
}
class A { public B Ref { get; set; } }
class B { }
class MA { public MB Ref { get; set; } }
class MB { }
每個Map調用都保留標識。
void Main()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<A, MA>().PreserveReferences();
cfg.CreateMap<B, MB>().PreserveReferences();
});
var b = new B();
var a1 = new A() { Ref = b };
var a2 = new A() { Ref = b };
var ma = Mapper.Map<MA[]>(new[]{a1, a2});
(ma[0] == ma[1]).Dump();
(ma[0].Ref == ma[1].Ref).Dump();
}
class A { public B Ref { get; set; } }
class B { }
class MA { public MB Ref { get; set; } }
class MB { }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.