2012-10-21 5 views
5

मैं एक डब्ल्यूसीएफ सेवा बनाना चाहता हूं जो इकाई फ्रेमवर्क का उपयोग कर SQL सर्वर में संग्रहीत प्रक्रिया को कॉल करता है और परिणाम सेट को ब्राउज़र पर देता है।एंटिटी फ्रेमवर्क का उपयोग करके संग्रहीत प्रक्रिया को कॉल करने और डब्लूसीएफ से आराम से वापस आने का बेहतर तरीका?

मैंने ईएफ में फ़ंक्शन आयात का उपयोग करके संग्रहित प्रक्रिया आयात की और मैंने एक जटिल प्रकार बनाया।

ऐसा लगता है कि ईएफ से एक जटिल प्रकार को क्रमबद्ध नहीं किया जा सकता है और आराम से लौटाया जा सकता है। मैंने यह काम करने का एकमात्र तरीका एक ठोस वर्ग बनाना और ईएफ से लौटे जटिल प्रकार से इसे बनाना है। यह काम करता है लेकिन इसका मतलब है कि अगर मेरे पास 30 संग्रहीत प्रक्रियाएं हैं तो मुझे 30 कंक्रीट कक्षाएं बनाने की आवश्यकता होगी जो दर्द का कुछ हद तक है।

वहाँ यह करने के लिए एक बेहतर तरीका है?

WCF अनुबंध:

public class People 
{ 
    public int person_id; 
    public string last_name; 
    public string first_name; 
    public string street_addr; 
    public string state_code; 
    public string postal_code; 

    public People(int person_id, string last_name, string first_name, string street_addr, string state_code, string postal_code) 
    { 
     this.person_id = person_id; 
     this.last_name = last_name; 
     this.street_addr = street_addr; 
     this.state_code = state_code; 
     this.postal_code = postal_code; 
    } 

    public People() { } 
} 

WCF सेवा:

public class Service1 : IService1 
{ 
/// <summary> 
/// Call stored proc and return resultset. 
/// </summary> 
/// <returns>List of resultset as concrete class People.</returns> 
public List<People> usp_GetPeople() 
{ 
    try 
    { 
     using (var db = new demoEntities()) 
     { 
      var res = db.usp_GetPeople(); 

      List<People> lst = new List<People>(); 

      foreach (usp_GetPeople_Result r in res) 
      { 
       People p = new People(r.person_id, r.last_name, r.first_name, r.street_addr, r.state_code, r.postal_code); 
       lst.Add(p); 
      } 

      return lst; 
     } 
    } 
    catch (Exception e) 
    { 
     Utility.Log("Error in usp_GetPeople. " + e.ToString()); 
     return null; 
    } 
} 
+1

क्या त्रुटि आप हो रही है जब आप प्रकार एफई द्वारा बनाई वापस जाने के लिए कोशिश कर रहे हैं? –

+0

क्या यह हो सकता है कि आपकी ऑब्जेक्ट (लोग) डेटा विशेषताओं से सजाए न हों? (डेटाकंट्रैक्ट/डेटामेम्बर) http://msdn.microsoft.com/en-us/library/ms733127.aspx – Mike

+0

अंतर्निहित रूप से प्रकार 'System.Collections.Generic.List ' to System 'Data.Objects को परिवर्तित नहीं कर सकता .bjectResult '\t मैं वापस गया और फिर कोशिश की। असल में ऐसा लगता है कि मुझे ऑब्जेक्ट रेसल्ट के बजाय केवल एक सूची वापस करने की आवश्यकता है। यह उस तरह से काम करता है। – Superdog

उत्तर

1

उत्तर की एक सूची वापस जाने के लिए है

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract,WebGet,XmlSerializerFormat] 
    List<People> usp_GetPeople();  
} 

कंक्रीट वर्ग हर प्रक्रिया के लिए बनाया जा करने की आवश्यकता होगी ईएफ जटिल प्रकार।

public List<usp_GetPeople_Result> usp_GetPeople2() 
    { 
     using (var db = new demoEntities()) 
     { 
      return db.usp_GetPeople().ToList(); 
     } 
    } 

यह काम नहीं करेगा:

public ObjectResult<usp_GetPeople_Result> usp_GetPeople3() 
    { 
     using (var db = new demoEntities()) 
     { 
      return db.usp_GetPeople(); 
     } 
    } 
संबंधित मुद्दे