c# - Entity Framework 6 Partial Stored Procedure Mapping -
उदाहरण के लिए, मेरे पास एक ऐसा वर्ग है:
सार्वजनिक वर्ग कर्मचारी {public int ईद; सार्वजनिक स्ट्रिंग का नाम; सार्वजनिक डबल वेतन; सार्वजनिक तिथि समय बीओडी; }
और एक संग्रहीत कार्यविधि जो कर्मचारी के लिए केवल id
और वेतन
स्तंभ देता है, मैं इकाई फ़्रेमवर्क (6 या 5), नीचे दिया गया है:
संग्रहीत कार्यविधि को निष्पादित करें, और जटिल परिणामों का उपयोग किए बिना कर्मचारी
ऑब्जेक्ट के परिणामों को मैप करें।
कृपया मेरी मदद करें ।
ध्यान दें:
- कृपया ध्यान दें कि प्रक्रिया अधिक जटिल होगी, और मैं लीकक का उपयोग नहीं करना चाहता और नाम या बोड का रिटर्न नहीं देता।
- यह मेरी परियोजना में बहुत महत्वपूर्ण है
- nhibernate में आप ऐसा कर सकते हैं।
यहाँ क्या है आपको इसकी आवश्यकता है:
// दो क्लासेस सार्वजनिक वर्ग कर्मचारी बनाएं {सार्वजनिक इन्ट आईडी; सार्वजनिक स्ट्रिंग का नाम; सार्वजनिक डबल वेतन; सार्वजनिक तिथि समय बीओडी; } सार्वजनिक वर्ग कर्मचारी और सीलरी {सार्वजनिक इन्ट आईडी; सार्वजनिक डबल वेतन; } // एक्स्टेंशन फंक्शन बनाएं // हमें ऑटोमैपर एक्सटेंशन लाइब्रेरी का उपयोग करना होगा। // Nuget पैकेज प्रबंधक का उपयोग कर ऑटोमैपर इंस्टॉल करें। और एक क्लास बनाएं और इस कोड को इसमें जोड़ें। नेमस्पेस मॉडल। मैपर {सार्वजनिक स्टेटिक क्लास एम्प्टीमामैपर {सार्वजनिक स्टेटिक कर्मचारी नक्शा-यंत्र कर्मचारी (यह कर्मचारी और सैलरी ओबीजी) {if (obj! = Null) {कर्मचारी मॉडल = ऑटोमैपर। ट्राईऑटोमैप & lt; कर्मचारी & gt; (obj); वापसी मॉडल; } नए कर्मचारी को वापस (); } सार्वजनिक स्थिर IEnumerable & lt; कर्मचारी & gt; MapToEmployee (यह IEnumerable & lt; EmployeeID &Salary & gt; obj) {if (obj! = नल) {वापस obj.Select (x = & gt; x.ConvertToEmployee ())। AsEnumerable (); } नई सूची & lt; मॉडल। कर्मचारी & gt; (); }} सार्वजनिक स्टेटिक क्लास ऑटोमैपर {स्टैटिक ऑटोमैपर () {} सार्वजनिक स्थिर टी TryAutoMap & lt; T & gt; (ऑब्जेक्ट ऑब्जेक्ट) {try {var currentObj = Activator.CreateInstance & lt; T & gt; (); Var प्रकार = वर्तमान ओबज। गेटटाइप (); Var propInfo = type.GetProperties (); Var _type = fromObject.GetType (); अग्रग्राम (var आइटम में _type.GetProperties ()) {var prop = propinfo.Where (c = & gt; c.Name == item.Name) .FirstOrDefault (); अगर (prop! = Null) {// if (prop.GetType ()। IsAssignableFrom (item.GetType ())) (यदि (IsGenericEnumerable (item.PropertyType)) {continue; } अगर (prop.GetType () == आइटम। GetType ()) {try {prop.SetValue (currentObj, item.GetValue (ऑब्जेक्ट से, रिक्त), रिक्त); } पकड़ {}}}}} वापसी चालू ओबज; } पकड़ {वापसी डिफ़ॉल्ट (टी); }} प्राइवेट स्टैटिक बूल इस्लाम (टाइप टाइप) {return type.IsClass & amp; amp; ! Type.IsPrimitive; } प्राइवेट स्टैटिक बूल इज़ेंनेरिकअनमेरेबल (प्रकार प्रकार) {if (टाइप.फ्लाननाम। टूलावर ()। इसमें शामिल हैं ("डेटामोडेल")। टाइप करें। फुल नाइम। टूलावर ()। इसमें शामिल हैं ("मॉडल") || टाइप। फुल नाइम। टू लोवर ( ) .कैम ("संग्रह")) {वापसी सच; } विवरण झूठा है; }}} // नामस्थान का उपयोग करें - & gt; Models.Mapper.EmployeeMapper; // अपने कार्यवाही को EmployeeIdAndSalary का उपयोग करके प्रयास करें {var _objList = context.SqlQuery & lt; EmployeeID &Salary & gt; ("YourProcedureName @SpParameterName", परम) .ओओएलआईटी ()। MapToEmployee (); } पकड़ {} / / मुझे लगता है कि यह वही है जो आपको चाहिए।
Comments
Post a Comment