有什么方法可以让 automapper 不克隆同一个对象,而是在层次结构中多次遇到它时使用单个对象?
基本上,我有一大堆不同的对象,它们都引用同一个对象。当我使用 AutoMapper 映射此集合时,它会生成一个对象数组,其中每个对象都引用一个新的克隆对象。所有这些克隆对象不再通过引用相等。这最终导致了我的内存不足问题。
有没有办法为 AutoMapper 配置某种缓存?
我已经尝试.PreserveReferences()过 AutoMapper 配置,但这并没有达到我想要的效果。我认为这仅适用于循环引用。
更新。
我测试的代码示例.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 { }
Run Code Online (Sandbox Code Playgroud)
每个 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 { }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |