c# - How to dispose SQLiteCommands created internally by Entity Framework? -


मेरे पास System.Data.SQLite (v1.0.94.0) के साथ समस्या है "SQLite त्रुटि (5): डेटाबेस है एक नया कनेक्शन खोलते समय लॉग इन करने के लिए "बंद" ऐसा लगता है कि इकाई फ़्रेमवर्क (v6.0) सभी SQLiteCommands का निपटान नहीं कर रहा है।

मैं इकाई फ़्रेमवर्क के साथ पहले कोड का उपयोग कर रहा हूं और इसलिए इसका उपयोग नहीं कर सकता।

एक परिदृश्य, जहां SQLiteCommand का निपटारा नहीं किया गया है, IQueryable का उपयोग कर रहा है।

  IQueryable & LT; TEntity & gt; क्वेरी = संदर्भ.सेट & lt; TEntity & gt; (); Var परिणाम = क्वेरी.ToList ();  

मैं इन न सुलझा हुआ आदेशों का ट्रैक कैसे रखूं, इसलिए मैं मैन्युअल रूप से उनका निपटारा कर सकता हूं?

मैं GC.Collect () कॉल करने से बचना चाहूंगा;

यह चर्चा कहने लगता है कि इंटरॉप लीगेसी सेटिंग को परिभाषित करना एक पुराने संस्करण पर वापस काम करता है ...

" इस मामले में मूल कारण यह है कि इकाई फ़्रेमवर्क अप्रत्यक्ष रूप से एक SQLiteCommand ऑब्जेक्ट बनाता है और बाद में इसे निपटाने में विफल रहता है। यह इन आंतरिक रूप से निर्मित कमांडों को बेनकाब करने के लिए प्रकट नहीं होता है, और न ही उनको स्पष्ट रूप से निपटाने का एक तरीका है, जिससे एक बाहरी कॉलर को सफाई के लिए कोई साधन नहीं मिल रहा है। यह काफी अजीब लगता है क्योंकि लगभग सभी "आईडीबी" कार्यान्वयन "जंगली में" मूल संसाधनों की आवश्यकता होती है इसके अलावा, यहां तक ​​कि डीबीसी कमांड बेस क्लास द्वारा प्रदान की जाती है जो .नेट फ्रेमवर्क स्वयं आईडीआईस्पोज़ाबल लागू करता है (अर्थात एसक्यूएलईटी के आधार वर्ग के रूप में इस्तेमाल किया जाता है कमान)। ""

" हाँ," SQLite.NET.Settings.targets "फ़ाइल में InteropLegacyClose MSBuild संपत्ति को" सही "पर सेट किया जाना चाहिए और परिभाषित "INTEROP_LEGACY_CLOSE = 1"; SQLite.Interop.20XX में INTEROP_EXTRA_DEFINES प्रॉपर्टी में जोड़ा जाना आवश्यक है। [बनाम] विज़ुअल स्टूडियो के संस्करण के लिए प्रॉप्स फ़ाइल का इस्तेमाल किया जा रहा है "

अद्यतन करें: SQLLite के लिए dotConnect व्यवसाय को निशुल्क और प्रो संस्करण प्रदान करता है जो कि नि: शुल्क नहीं है ... यह जांचने योग्य है बाहर की ओर।

UPDATE2: "यदि यह ईएफ के साथ एक बग था, तो इसका जवाब देने में, प्रत्येक व्यक्ति जो इसका उपयोग करता है SQL सर्वर को लक्षित करते समय भी समस्याएं होतीं - Panagiotis Kanavos "

बिल्कुल नहीं, ऐसा लगता है कि बग केवल 1.0.8xxx के आसपास SQLLite उपयोगकर्ताओं द्वारा रिपोर्ट किया गया है जहां उन्होंने अपना विच्छेदन विधि बदल दी ... ईएफ प्रदाता अलग-अलग हो सकता है, जैसे कि आप इसे सेट कर सकते हैं SQLLite (बग रिपोर्ट) या SQLServer (बग की रिपोर्ट नहीं है) आदि जैसे नीचे दिए गए हैं ...

  & lt; system.data & gt; & lt; डीबीप्रॉव्वायरफैक्टरीज & gt; & lt; नाम जोड़ें = "SQLite Data Provider" invariant = "System.Data.SQLite" विवरण = "SQLite के लिए डेटा प्रदाता" प्रकार = "System.Data.SQLite.SQLiteFactory, System.Data.SQLite" / & gt; & lt; / DbProviderFactories & gt; & lt; /system.data>   

या

  & lt; प्रदाता & gt; & lt; प्रदाता invariantName = "System.Data.SqlClient" प्रकार = "System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework SqlServer "/ & gt; & lt; / प्रदाता & gt;  

Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -