The specified cast from a materialized 'System.Guid' type to the 'System.Int32' type is not valid.
निर्दिष्ट डाली एक materialized 'System.Guid' प्रकार से 'System.Int32' टाइप करने के लिए वैध
हम कई WCF सेवाओं एकाधिक की संगामिति मोड और एकल के InstanceContextMode
है कि नहीं है। हमारा आर्किटेक्चर कन्स्ट्रक्टर-आधारित निर्भरता इंजेक्शन का उपयोग करके एक कमजोर युग्मित मॉडल पर केंद्रित है। यह बदले में यूनिटी 2.0 का उपयोग करके लागू किया गया है (प्रत्येक सेवा के web.config में एकता कंटेनर सेक्शन में परिभाषित इंटरफेस और प्रकारों के बीच मैपिंग है)। हमारी निर्भरताओं में से एक एक डीएएल असेंबली (डेटा एक्सेस लेयर) है जो एमएसएसक्ल सर्वर के साथ संवाद करने के लिए एंटिटी फ्रेमवर्क 4 का उपयोग करती है। डेटाबेस से बात करने वाले वर्ग भी एकता मैपिंग में शामिल हैं।
जब हम अपने एकीकरण परीक्षण चलाते हैं तो सबकुछ बढ़िया होता है। लेकिन जब हम लोड परीक्षण (2, 3, 4 समवर्ती उपयोगकर्ताओं) को चलाने के लिए हम निम्न त्रुटि देखने लगते हैं हमारे प्रदर्शन पर्यावरण के लिए ले जाने के:
System.InvalidOperationException: The 'auth_token' property on 'Session' could not be set to a 'Int32' value. You must set this property to a non-null value of type 'Guid'.
निम्नलिखित ढेर के साथ:
at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)
at System.Data.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String typeName)
at lambda_method(Closure , Shaper)
at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper)
at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)
at System.Linq.Queryable.First[TSource](IQueryable`1 source)
at MISoa.DataAccessLayer.Authentication.AuthenticationDB.RetrieveSession(Guid authToken)
at MISoa.DataAccessLayer.Authentication.AuthenticationAccess.RetrieveSession(String sessionToken)
यहाँ अपराधी विधि है:
public Session RetrieveSession(Guid authToken)
{
CheckDBContext();
var sessions = (from r in _dbContext.Sessions
where r.auth_token == authToken
select r);
return sessions.Count() > 0 ? sessions.First() : null;
}
CheckDBContext
विधि बस की जाँच करता है अगर db संदर्भ रिक्त है और, अगर यह है, यह एक कस्टम अपवाद फेंकता tion।
Guid auth_token
DateTime time_stamp
String user_id
String app_id
तो, यह कभी कभी ऊपर LINQ डेटाबेस जहां पहले कॉलम एक int
और नहीं एक guid
है से किसी अन्य वस्तु रिटर्न की तरह दिखता है:
emdx सत्र इकाई वस्तु इन सार्वजनिक गुण है? और यदि हां - क्यों? क्या मुझे एक-दूसरे के डीबी संदर्भ को ओवरराइड करने वाले एकाधिक धागे के साथ कोई समस्या है? बीटीडब्ल्यू - हमने उस कोड को सारणीबद्ध किया जो डीबी संदर्भ को एक अलग वर्ग (बेसडीबी) में तत्काल करता है जिसे एकता द्वारा भी संभाला जाता है। इसलिए, क्योंकि सेवा एक सिंगलटन है क्योंकि मेरे पास बेसडीबी का एक उदाहरण है, है ना? क्या यह समस्या यहाँ है?
ओह, एक और बात। हमें बताया गया था कि हमारे पास एमएसएसएलएल 2005 होगा ताकि एडीएमएक्स फाइल में हमारे पास ProviderManifestToken="2005"
हो। लेकिन मैंने अभी जांच की है और हमारे प्रदर्शन डेटाबेस के साथ सर्वर संस्करण 2008 है। क्या यह एक समस्या है?
आपकी मदद के लिए धन्यवाद।
पहली सरल चीजें जो मैं जांचूंगा: क्या आपके डीबी में एक गुड है? त्रुटि कहती है कि कुछ int.auth_token को int में सेट करने का प्रयास कर रहा है। क्या कोई int आईडी कॉलम है जिसे ठीक से मैप नहीं किया गया है?क्या आप एक एसक्यूएल प्रोफाइलिंग ट्रेस कर सकते हैं और वास्तविक एसक्यूएल कॉल की पहचान कर सकते हैं? मुझे सच में संदेह है कि बहु-थ्रेडिंग आपकी समस्याओं का कारण बन रही है। –
क्या आप सुनिश्चित हैं कि डेटाबेस में कॉलम संबंधित संपत्ति प्रकार का है? अपवाद कहता है कि डीबीडेटा रीडर ग्रिड पढ़ता है लेकिन आपकी कक्षा की संपत्ति int है। – Pawel