जब ऑटोमैपर किसी ऑब्जेक्ट से मुकाबला करता है जिसे पहले ही मैप किया गया है, ऐसा लगता है कि इसे फिर से मैप करने की कोशिश करने के बजाय उस ऑब्जेक्ट का फिर से उपयोग करना प्रतीत होता है। मेरा मानना है कि यह .Equals()
पर आधारित है।मैप किए गए ऑब्जेक्ट कैश न करने के लिए मैं ऑटोमैपर कैसे प्राप्त करूं?
मेरे पास एक पेड़ है जिसे मैप किया जा रहा है। तो, कुछ गुणों और बच्चों के साथ एक नोड। नोड्स में से एक से अधिक .Equals()
का वैल्यू है, क्योंकि यह एक आईडी प्रॉपर्टी पर आधारित है। नोड्स के बच्चे अलग हैं और मुझे उन दोबारा मैप की जरूरत है, लेकिन यह एक कैश किए गए मानचित्र मान का उपयोग कर रहा है।
कैश मैपिंग बंद करने का कोई तरीका है? मैं सोच सकता हूं कि एक नया कनवर्टर लागू कर रहा है, लेकिन यह ऑटोमैपर का उपयोग करने के उद्देश्य को पूरी तरह से हरा देता है।
यहां पुन: पेश करने के तरीके पर एक उदाहरण दिया गया है।
void Main()
{
var source = new List<Tag>
{
new Tag
{
Id = 1,
Name = "Tag 1",
ChildTags = new List<Tag>
{
new Tag
{
Id = 2,
Name = "Tag 2",
ChildTags = new List<Tag>
{
new Tag {Id = 3, Name = "Tag 3"},
new Tag {Id = 4, Name = "Tag 4"}
}
}
}
},
new Tag { Id = 1, Name = "Tag 1" },
new Tag
{
Id = 3, Name = "Tag 3", ChildTags = new List<Tag>
{
new Tag {Id = 4, Name = "Tag 4"}
}
}
};
Mapper.CreateMap<Tag, Tag>();
var results = Mapper.Map<IList<Tag>, IList<Tag>>(source);
results.Dump();
}
public class Tag
{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<Tag> ChildTags { get; set; }
public override bool Equals(Object obj)
{
if (obj == null)
{
return false;
}
var x = this;
var y = (Tag)obj;
return x.Id.Equals(y.Id);
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
}
इस बारे में मिली केवल एक संदर्भ: https://groups.google.com/forum/?fromgroups#!topic/automapper-users/8ThkaCk_3fc। –
मैं मैपिंगइंजिन को तुरंत चालू करने और जीवन चक्र को नियंत्रित करने की कोशिश करता हूं जैसे कि कहता है और देखता है कि वह वह चाल करेगा या नहीं। –
तो, ऐसा लगता है कि मुझे एक ITypeMapFactory को लागू करने की आवश्यकता होगी। मुझे जो करना है उसके लिए यह बहुत अधिक काम है। अगर इसे बंद करने का कोई आसान तरीका था, तो यह अच्छा होगा, लेकिन ऐसा नहीं लगता है। यदि आप इस प्रश्न का उत्तर बनाना चाहते हैं और इसमें एक उदाहरण देना चाहते हैं, तो मैं इसे आपके लिए उत्तर के रूप में चिह्नित करूंगा। –