2010-06-01 9 views
8

शीर्षक की तरह कहते हैं, मैं निम्नलिखित अपवाद है:इकाई प्रकार के स्पष्ट निर्माण [MyClass] क्वेरी में अनुमति नहीं है

विवरण: इवेंट कोड: 3005 इवेंट संदेश: एक बिना क्रिया का अपवाद आ गई है। अपवाद जानकारी: अपवाद प्रकार: NotSupportedException अपवाद संदेश: इकाई प्रकार का स्पष्ट निर्माण 'Company.Project.Core.Domain.Friend' क्वेरी में अनुमति नहीं है।

मैं एसक्यूएल करने के लिए LINQ का उपयोग कर रहा है और मेरी DataContext में निम्नलिखित कोड है:

var friends2 = (
    from f in dc.Friends 
    where f.MyFriendsAccountId == accountId 
    where f.AccountId != accountId 
    select new 
    { 
     f.FriendId, 
     AccountId = f.MyFriendsAccountId, 
     MyFriendsAccountId = f.AccountId, 
     f.CreateDate, 
     f.Timestamp 
    }).Distinct(); 

result.AddRange(
    from o in friends2 
    select new Friend() 
    { 
     FriendId = o.FriendId, 
     AccountId = o.AccountId, 
     CreateDate = o.CreateDate, 
     MyFriendsAccountId = o.MyFriendsAccountId, 
     Timestamp = o.Timestamp 
    }); 

अंतिम कोड ब्लॉक त्रुटि फेंक रहा है और मैं बहुत यकीन है कि यह इस बयान कि अपराधी है कर रहा हूँ :

.Select(o => **new Friend** 

इस त्रुटि से बचने के लिए मुझे अपने कोड को फिर से कैसे काम करना चाहिए?

+0

यहां उत्तर दिया गया: http://stackoverflow.com/questions/787296/explicit-construction-of-entity-type-in-query-is-not-allowed –

+0

धन्यवाद लेकिन मैं अभी भी पूरी तरह स्पष्ट नहीं हूं। मैं अपनी विशेष स्थिति को देखते हुए एक उदाहरण की सराहना करता हूं। धन्यवाद। –

उत्तर

11

डेटा संदर्भ का हिस्सा हैं जो इकाइयां LINQ क्वेरी का उपयोग करके बनाई जा सकती हैं। यह सी # टीम का एक अच्छा विचार डिजाइन निर्णय है। चूंकि इकाइयों को Select कथन में नया (मैन्युअल रूप से) नया कर दिया गया है, इसका मतलब यह होगा कि उन्हें DataContext द्वारा ट्रैक नहीं किया गया है और यह डेवलपर्स को भ्रमित कर सकता है। दूसरी तरफ, जब DataContext स्वचालित रूप से सबमिट करेगा उन नई संस्थाओं को सबमिट करें, यह भी भ्रमित हो जाएगा। बाएं का एकमात्र विकल्प डेवलपर्स से संचार कर रहा था कि ऐसा करना एक अच्छा विचार नहीं है, और यही वह है जो आपने देखा।

+0

स्पष्टीकरण के लिए धन्यवाद कि यह क्यों काम नहीं कर रहा है। अब, क्या आप यह बता सकते हैं कि इसे कैसे काम करना है? मुझे किस कोड को बदलने की ज़रूरत है? धन्यवाद। –

+1

लाइन 'result.AddRange (मित्रों में से चुनें' से 'परिणाम' में बदलें। AddRange (दोस्तों में से o.oorray() का चयन करें। – Steven

+1

आपको ऐसा करने पर सावधान रहना चाहिए, क्योंकि यह ऑब्जेक्ट बनाने से पहले दोस्तों 2 को गिनती करेगा LINQ क्वेरी के चयन भाग में। – Vedran

1

यदि आपके प्राथमिक वर्ग में आपके मित्र वर्ग में किसी भी कॉलम पर सेट नहीं है तो यह काम करेगा। इस तरह के बदलावों को अब उस वर्ग के लिए ट्रैक नहीं किया जाएगा, लेकिन आपका कोड काम करेगा।

संबंधित मुद्दे