मैं एक डोमेन मॉडल से गुणों को मैप करने के लिए ValueInjecter का उपयोग कर रहा हूं, जो एक सेवा परत के माध्यम से एक डीटीओ पर कार्य करता है। प्रश्न में सेवा अद्यतन स्वीकार करती है ... इसलिए एक अद्यतन डीटीओ पारित किया जाता है और फिर इसे डोमेन ऑब्जेक्ट में इंजेक्शन दिया जाता है और सहेजा जाता है।वैल्यू इंजेक्टर: डीटीओ टू डोमेन मॉडल (एनएचबीर्नेट)
// Domain
public class Member
{
public Country Country { get; set; }
}
public class Country
{
public string Code { get; set; }
public string Name { get; set; }
}
//Dto
public class MemberDto
{
public string CountryCode { get; set; }
}
//Transformation Method attempt 1
public Member InjectFromDto (MemberDto dto, Member source)
{
source = source.InjectFrom<UnflatLoopValueInjection>(dto);
return source;
}
अब यह सब ऊपर कोड करता है अद्यतन करता है संपत्ति Member.Country.Code जो स्पष्ट रूप से क्या मैं इसे की जरूरत है ऐसा करने के लिए नहीं है।
तो डॉक्स से, मैं समझ मैं एक ओवरराइड बनाने के लिए आवश्यक है और इस मिला:
public class CountryLookup: UnflatLoopValueInjection<string, Country>
{
protected override Country SetValue(string sourcePropertyValue)
{
return countryService.LookupCode(sourcePropertyValue);
}
}
//revised transformation call
//Transformation Method attempt 2
public Member InjectFromDto (MemberDto dto, Member source)
{
source = source.InjectFrom<UnflatLoopValueInjection>(dto)
.InjectFrom<CountryLookup>(dto);
return source;
}
मेरे समस्या डीबगिंग के दौरान है, CountryLookup कभी नहीं कहा जाता हो जाता है।
करने के कारणों में मैं के बारे में सोच सकते हैं: injecter को देश प्रकार से मेल नहीं मूल्य के कारण
- Nhibernate प्रॉक्सी वर्गों? यह समझ में नहीं आता है क्योंकि यह flattening के दौरान काम करता है।
- शायद किसी कारण से unflattening फायरिंग नहीं है। यानी Dto CountryCode है और डोमेन Country.Code
है मैं सही वस्तु लौटने के लिए अद्यतन इंजेक्शन के दौरान उपयोग करने के लिए एक countryService.LookupCode कॉल करने के लिए Dto पर CountryCode संपत्ति का उपयोग करने की जरूरत है।
हमें बताएं कि आप क्या हासिल करने की कोशिश कर रहे हैं, पहला प्रयास काम करता है, लेकिन यह आवश्यक नहीं है कि आपको क्या चाहिए, आपको क्या चाहिए? – Omu
देश लुकअप नामक आपका इंजेक्शन स्ट्रिंग से देश में खुला होगा जिसका अर्थ है कि यह देशकोड प्रकार की स्ट्रिंग से मूल्य प्राप्त करने के लिए प्रतीत होता है और इसे देश में डालता है। प्रकार का कोड देश – Omu
@ ओमु यह सही है उदाहरण के लिए यदि मेरा देश वस्तु देश है: {कोड : यूएसए, नाम: संयुक्त राज्य} और मेरा डीटीओ देशकोड में गुजरता है: "सीए" यह सिर्फ देश को सेट करता है। सीओ को संपत्ति को कोड करें और 'नाम' संपत्ति को संयुक्त राज्य अमेरिका के रूप में छोड़ दें। याद रखें कि मैं एक पूर्व-जनसंख्या वाले डोमेन ऑब्जेक्ट को अपडेट कर रहा हूं ... इस वजह से मुझे सही देश ऑब्जेक्ट देखने के लिए अपने देश सेवा को कॉल करने की आवश्यकता है। मैं डीटीओ से 'कोड' को कैप्चर करना चाहता हूं, और उसके बाद सही देश ऑब्जेक्ट को देखने के लिए उस कोड का उपयोग करना चाहता हूं। – Galen