दिलचस्प पोस्ट
क्या सभी चलने वाले एल्गोरिदम को पुनरावर्ती रूप से व्यक्त किया जा सकता है? कमांडबटन / कमांड लिंक / एजेक्स क्रिया / श्रोता विधि नहीं लागू या इनपुट मान सेट नहीं / अपडेट किया गया Xcode इंस्ट्रूमेंट्स .trace फ़ाइल को पढ़ने की कोशिश कर रहा है। .trace फ़ाइल का फ़ाइल स्वरूप क्या है? एएसपी.नेट रिस्पांस में बड़ी फाइलें कैसे वितरित करें? क्या एमएसटीईस्ट एनयूएनआईटी के टेस्टसीज़ के बराबर है? त्रुटि 80020101 के कारण ऑपरेशन को पूरा नहीं कर सका। IE स्क्रॉल के अंत में "अधिक आइटम लोड करें" जोड़ने के लिए गतिशील सूची दृश्य AngularJS और कॉलिंग एमवीसी एपीआई का उपयोग कर फ़ाइल कैसे डाउनलोड करें? NumPy असाइनमेंट में डुप्लिकेट इंडेक्सों का प्रबंधन मैं एक पायथन समारोह का स्रोत कोड कैसे प्राप्त करूं? एक संग्रह से यादृच्छिक सबसेट लेने का सबसे अच्छा तरीका है? pthread: एक प्रिंटफ़ स्टेटमेंट बाल थ्रेड में दो बार प्रिंट हो जाता है मैं एक SQLite डेटाबेस तालिका में एक स्तंभ का नाम कैसे बदल सकता हूँ? कैसे जानने के लिए कि MySQLnd सक्रिय ड्राइवर है? LD_PRELOAD तंत्र का उपयोग करके 'malloc' ओवरराइड करना

केवल प्रारंभिक, इकाई के सदस्य, और इकाई नेविगेशन गुण समर्थित हैं

मुझे यह अपवाद मिल रहा है:

विशिष्ट प्रकार के सदस्य 'भुगतान' को LINQ में इकाईयों में समर्थित नहीं है। केवल प्रारंभिक, इकाई के सदस्य, और इकाई नेविगेशन गुण समर्थित हैं।

public ActionResult Index() { var debts = storeDB.Orders .Where(o => o.Paid == false) .OrderByDescending(o => o.DateCreated); return View(debts); } 

मेरा मॉडल वर्ग

 public partial class Order { public bool Paid { get { return TotalPaid >= Total; } } public decimal TotalPaid { get { return Payments.Sum(p => p.Amount); } } 

भुगतान फ़ील्ड राशि वाले एक संबंधित तालिका है, यदि मैं भुगतान के बारे में सही जानकारी दिखा रहा है, कोड के साथ क्या गलत है, कोई सुराग निकालता है तो क्वेरी काम करती है?

जवाब का सुझाव दिया जैसे:

  public ActionResult Index() { var debts = storeDB.Orders .OrderByDescending(o => o.DateCreated) .ToList() .Where(o => o.Paid == false); return View(debts); } 

वेब के समाधान से एकत्रित समाधान "केवल प्रारंभिक, इकाई के सदस्य, और इकाई नेविगेशन गुण समर्थित हैं"

इकाई आपकी भुगतान की गई संपत्ति को SQL में कनवर्ट करने का प्रयास कर रही है और इसलिए नहीं कि वह तालिका स्कीमा का हिस्सा नहीं है।

आप क्या कर सकते हैं एंटिटी क्वेरी को कोई भुगतान किए गए फिल्टर के साथ तालिका नहीं दी जाती है और फिर भुगतान वाले भुगतान न किए गए नंबर को फ़िल्टर करें।

 public ActionResult Index() { var debts = storeDB.Orders //.Where(o => o.Paid == false) .OrderByDescending(o => o.DateCreated); debts = debts.Where(o => o.Paid == false); return View(debts); } 

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

बस एक ऐसी ही समस्या को हल करना पड़ा ऊपर दिए गए समाधानों में इन-मेमोरी प्रोसेसिंग की आवश्यकता होती है, जो एक खराब अभ्यास (आलसी लोडिंग) है।

मेरा समाधान एक सहायक लिखना था जो कि एक विधेय को वापस लाया:

 public static class Extensions { public static Expression<Func<Order, bool>> IsPaid() { return order => order.Payments.Sum(p => p.Amount) >= order.Total; } } 

आप अपने linq कथन को फिर से लिख सकते हैं:

 var debts = storeDB.Orders .Where(Extensions.IsPaid()) .OrderByDescending(o => o.DateCreated); 

यह गणना आसान है जब आप गणना लॉजिक (DRY) का पुन: उपयोग करना चाहते हैं। नकारात्मक पक्ष यह है कि तर्क आपके डोमेन मॉडल में नहीं है।

लिनक्स स्टेटमेंट्स को एसक्यूएल स्टेटमेंट में कनवर्ट करता है और उन्हें डेटाबेस में निष्पादित करता है।

अब, यह रूपांतरण केवल संस्थाओं के सदस्यों, प्रारंभकर्ताओं और इकाई नेविगेशन गुणों के लिए होता है। तो समारोह को प्राप्त करने या संपत्ति की तुलना करने के लिए, हमें पहले उन्हें इन-मेमोरी में परिवर्तित करना होगा और फिर डेटा प्राप्त करने के लिए फ़ंक्शन लागू करना होगा।

इसलिए संपूर्णता में,

 var debts = storeDB.Orders.toList() .Where(o => o.Paid == false) .OrderByDescending(o => o.DateCreated); 

यह समस्या एक [NotMapped] प्रॉपर्टी से भी आ सकती है जो आपके डीबी मॉडल और देखें मॉडल में समान नाम है।

ऑटोमैपर प्रक्षेपण के दौरान डीबी से इसे चुनने की कोशिश करता है; और नॉटमैप की संपत्ति स्पष्ट रूप से डीबी में मौजूद नहीं है।

समाधान डीबी मॉडल से दृश्य मॉडल को मानचित्रण करते समय ऑटोमैपर कॉन्फ़िग में संपत्ति को Ignore करना है।

  1. अपने डीबी मॉडल में नाम Foo साथ एक [NotMapped] संपत्ति खोजें।
  2. अपने दृश्य मॉडल में एक ही नाम, Foo साथ संपत्ति ढूंढें।
  3. अगर ऐसा है, तो अपना ऑटोमैपर कॉन्फ़िग बदलें। जोड़ें .ForMember(a => a.Foo, b => b.Ignore());

अन्य संभावित कारण यह है कि आप अपनी संपत्ति के लिए IEnumerable का उपयोग कर रहे हैं, बजाय ICollection

इसके बजाय:

 public class This { public long Id { get; set; } //... public virtual IEnumerable<That> Thats { get; set; } } 

यह करो:

 public class This { public long Id { get; set; } //... public virtual ICollection<That> Thats { get; set; } } 

और तुम हंकी डैरी हो … बेवकूफ बात दो घंटे खत्म हो गई …

मुझे इस मुद्दे का सामना करना पड़ रहा था क्योंकि एक सदस्य वैरिएबल को केवल without set संपत्ति के get without set

इसका मतलब है कि इसका auto calculated और the table में किसी स्तंभ के रूप में not stored

इसलिए इसकी table schema में not exist

इसलिए make sure कि कोई भी सदस्य वैरिएबल not auto calculated हो have जिसकी not auto calculated getter और setter संपत्तियों के लिए हो