मैं entity framework 5 का उपयोग कर रहा हूं और मैंने अपने .edmx मॉडल में दो संग्रहीत कार्यविधियाँ जोड़ी हैं।

पहली संग्रहीत प्रक्रिया एक स्ट्रिंग लौटाती है और अगर मैं Visual Studio में मॉडल ब्राउज़र खोलता हूं, तो मैं Returns a Collection Of अनुभाग को बदल सकता हूं और स्केलर प्रकार को स्ट्रिंग पर सेट कर सकता हूं, निम्नानुसार:

ScalarType

फिर कोड में, मैं एसपी को कॉल कर सकता हूं और इस प्रकार परिणाम प्राप्त कर सकता हूं:

using (var context = new MyEntities())
{
    var spResult = context.mySPNameFromTheModel(exampleParameter1, exampleParameter2); // This will get the output as string
}

उपरोक्त उदाहरण ठीक काम करता है, लेकिन मैं एक कॉम्प्लेक्स प्रकार के साथ कैसे कर सकता हूं?

मेरी दूसरी संग्रहीत प्रक्रिया दो स्तंभों के साथ, केवल एक पंक्ति लौटाती है। इसलिए मैंने दो स्ट्रिंग गुणों वाली एक क्लास बनाई, लेकिन जब मैं कॉम्प्लेक्स में बदलता हूं तो मैं इसे नहीं देख सकता, मैं ड्रॉप डाउन से कुछ भी नहीं चुन सकता क्योंकि यह खाली है। कॉम्प्लेक्स टाइप

जब मैं Get Column Information पर क्लिक करता हूं, तो यह सिर्फ यह कहता है कि एसपी कोई कॉलम नहीं लौटाता, जो सच नहीं है।

3
Apostrofix 19 नवम्बर 2015, 11:18

3 जवाब

सबसे बढ़िया उत्तर
  • जांचें कि क्या edmx को इसी संग्रहीत कार्यविधि के साथ अपडेट किया गया है
  • मैन्युअल रूप से मॉडल ब्राउज़र में एक कॉम्प्लेक्स टाइप बनाने की कोशिश करें।
  • सहेजें और पुनर्निर्माण समाधान
  • फिर फ़ंक्शन आयात जोड़ें और फ़ंक्शन आयातनाम दें, sp & रिटर्न संग्रह में मैन्युअल रूप से बनाए गए कॉम्प्लेक्स प्रकार का चयन करें।
  • अब कॉलम जानकारी प्राप्त करें पर क्लिक करें।
  • फिर ओके पर क्लिक करें।
3
Vishnu S 19 नवम्बर 2015, 08:44

मुझे यह मैपिंग स्टोर्ड प्रोसिजर आउटपुट से पोको क्लास लेख शीर्षक में निर्दिष्ट प्रश्न का उत्तर देने में बहुत सहायक हो सकता है क्योंकि मैं ADO.NET का उपयोग करते हुए तार लिखने के झंझट के बिना इसे करने के लिए एक रास्ता खोज रहा था।

public IList<Order> GetOrders(string CustomerID)
{
    var orders = new List<Order>();
    using (var con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
    {
        // Use count to get all available items before the connection closes
        using (SqlCommand cmd = new SqlCommand("PagingProcTest", con))
        {
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add("@CustomerID", SqlDbType.NChar).Value = CustomerID;

            cmd.Connection.Open();

            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                // Map data to Order class using this way
                orders = DataReaderMapToList<Order>(reader).ToList();

                // instead of this traditional way
                // while (reader.Read())
                // {
                    // var o = new Order();
                    // o.OrderID = Convert.ToInt32(reader["OrderID"]);
                    // o.CustomerID = reader["CustomerID"].ToString();
                    // orders.Add(o);
                // }
            }
            cmd.Connection.Close();
        }
    }
    return orders;
}

private static List<T> DataReaderMapToList<T>(DbDataReader dr)
{
    List<T> list = new List<T>();
    while (dr.Read())
    {
        var obj = Activator.CreateInstance<T>();
        foreach (PropertyInfo prop in obj.GetType().GetProperties())
        {
            if (!Equals(dr[prop.Name], DBNull.Value))
            {
                prop.SetValue(obj, dr[prop.Name], null);
            }
        }
        list.Add(obj);
    }
    return list;
}
1
usefulBee 27 पद 2017, 21:52

सपा से लौटे स्तंभों में उपनाम जोड़ने का प्रयास करें। उदाहरण के लिए: SELECT table1.id ID

0
Aleksa 19 नवम्बर 2015, 08:27