2012-04-12 17 views
6

मेरे पास एक नया नया सर्वर है जिसे मैंने .NET 4.5 बीटा को पुनर्वितरण योग्य स्थापित किया है। स्थानिक सुविधाओं का उपयोग करने की कोशिश करते समय मुझे एक लागू अपवाद प्राप्त हो रहा है। अगर मैं पूर्ण VS.NET 11 बीटा तो स्थापित कोड ठीक काम करता है इस कोड को ....NET 4.5 बीटा डीबीजीोग्राफी NotImplementedException

var x = DbGeography.PointFromText(string.Format("POINT({0} {1})", -45, 45), 4326); 

इस अपवाद फेंकता ...

System.NotImplementedException: The method or operation is not implemented. 
at System.Data.Spatial.DefaultSpatialServices.GeographyPointFromText(String geographyText, Int32 spatialReferenceSystemId) 

। कोई विचार क्यों? क्या चीज़ छूट रही है?

उत्तर

पावेल के लिए धन्यवाद के लिए अद्यतन। आपको एसक्यूएल सीएलआर प्रकार स्थापित करने की आवश्यकता है। आप इस लिंक पर 2012 संस्करण प्राप्त कर सकते हैं: माइक्रोसॉफ्ट एसक्यूएल सर्वर के लिए

माइक्रोसॉफ्ट सिस्टम CLR प्रकार 2012 http://www.microsoft.com/download/en/details.aspx?id=29065

राय

मैं वास्तव में न समझ में क्यों .NET फ़्रेमवर्क एक है एसक्यूएल सर्वर पर निर्भरता। इन वर्गों के बारे में कुछ खास नहीं है। मुझे एहसास है कि यह एक ऐतिहासिक चीज है जहां कोड मूल रूप से एसक्यूएल टीम द्वारा लिखा गया था और .NET टीम इसका पुन: उपयोग करना चाहता था। यह बहुत स्पष्ट नहीं है कि यह एक प्रदाता-आधारित कार्यान्वयन है। एक बेहतर अपवाद संदेश एक दिन के काम को बचाया होगा।

+1

निर्भरता का कारण वास्तव में प्लेटफॉर्म स्वतंत्र होना है। ईएफ उपयोगकर्ता को डीबीजीगोग्राफी और डीबीजीमेट्री प्रकार (जो प्लेटफॉर्म अज्ञेयवादी हैं) का खुलासा करता है लेकिन डेटाबेस में उनके स्वयं के स्थानिक प्रकार होते हैं जिन्हें वे समझते हैं। एसक्यूएल सर्वर के अपने स्थानिक प्रकार हैं लेकिन ओरेकल के अपने स्थानिक प्रकार होंगे। स्थानिक प्रदाता को ईएफ स्थानिक प्रकारों का अनुवाद करने की आवश्यकता होती है जो डेटाबेस समझते हैं। चूंकि आप SqlServer का उपयोग कर रहे हैं SqlServer विशिष्ट स्थानिक प्रदाता DbGeometry और DbGeography प्रकारों को SQL सर्वर विशिष्ट प्रकारों में अनुवादित करता है। एसक्यूएल सर्वर डीबीजीओोग्राफी या डीबीजीमेट्री को समझ में नहीं आता है। – Pawel

+0

लेकिन वह कोड SQL सर्वर का उपयोग नहीं कर रहा है; यह सिर्फ .NET कोड की एक पंक्ति है। मैं डेटाबेस के साथ बिल्कुल बातचीत नहीं कर रहा हूं। अगर मैं एक मेमोरी भू-स्थानिक अनुप्रयोग बनाना चाहता हूं तो क्या होगा? मैं सिर्फ .NET के साथ ऐसा क्यों नहीं कर सकता? – craigtadlock

+0

संपूर्ण स्थानिक कार्यक्षमता का निर्माण इकाई फ्रेमवर्क के दायरे से बाहर है और यह एसकएलसेवर टीम द्वारा पहले से ही किया गया है इसकी प्रतिलिपि बना रहा होगा। हमारे पास विशेषज्ञता नहीं है और हम इस समय एंटिटी फ्रेमवर्क की नई सुविधाओं पर खर्च करेंगे। यदि आपको डेटाबेस के बिना स्थानिक प्रकारों का उपयोग करने की आवश्यकता है तो आप शायद एक विशेष प्रकार की लाइब्रेरी का उपयोग करके बेहतर हो जाएंगे जो पूरी तरह से स्थानिक कार्यक्षमता पर केंद्रित है। यह शायद भी बेहतर प्रदर्शन करेगा। – Pawel

उत्तर

13

एंटिटी फ्रेमवर्क में डिफॉल्टस्पैटल सर्विसेज एसक्यूजीजीोग्राफी और एसक्लगोमेट्री प्रकारों का बैकिंग प्रकार के रूप में उपयोग कर रहे हैं। ये दो प्रकार Microsoft.SqlServer.Types.dll असेंबली में रहते हैं जो .NET Framework का हिस्सा नहीं है। अपवाद फेंक दिया जाता है जब ईएफ इन प्रकारों को नहीं ढूंढ सकता (अपवाद अधिक उपयोगी हो सकता है ...)। जब आप विजुअल स्टूडियो को स्थापित करते हैं तो यह आपकी मशीन पर स्थानीय डीबी स्थापित करेगा (या आपके पास पहले से ही एक एसक्लएक्सप्रेस डेटाबेस हो सकता है) और यह संभव है कि जिस तरह से आप काम कर रहे मशीन पर टाइप प्राप्त करें। ऐसी मशीन पर जहां केवल .NET Framework स्थापित है और SQL सर्वर नहीं है, आपके पास इन प्रकार नहीं होंगे। आप या तो बॉक्स पर SqlExpress स्थापित कर सकते हैं जहां आपको अपवाद मिलता है या आप केवल प्रकारों को स्थापित करने का प्रयास कर सकते हैं। मुझे यकीन नहीं है कि असेंबली कहां प्राप्त करें, लेकिन मुझे लगता है कि एसक्यूएल सर्वर फीचर पैक (http://www.microsoft.com/en-us/download/details.aspx?id=27596) हो सकता है। SqlServer 2008 और SqlServer 2012 के प्रकार समर्थित हैं, इसलिए इससे कोई फर्क नहीं पड़ता कि आप किस संस्करण को स्थापित करते हैं।

संपादित

EF6 में अपवाद एक बेहतर संदेश में शामिल होंगे देखें: https://entityframework.codeplex.com/SourceControl/changeset/b3eca2c141c0fb517504f9731dc8ba7a9c5727ee

कार्य के लिए इस्तेमाल किया आइटम इस बग को ट्रैक करने के: https://entityframework.codeplex.com/workitem/3

+0

धन्यवाद! तुम सही हो। मैं जवाब के साथ सवाल अद्यतन करें। – craigtadlock

+0

@Pawel मैं Azure पर DbGeography प्रकार का उपयोग कर रहा हूं और इस समस्या में भाग गया हूं। मैं इसे Azure पर कैसे इंस्टॉल करूं? क्या मैं बस अपने वेब प्रोजेक्ट में माइक्रोसॉफ्ट.SqlServer.Types.dll शामिल कर सकता हूं? – darwindave

+7

कभी नहीं। nuget इंस्टॉल-पैकेज का उपयोग कर Microsoft.SqlServer.Types चाल चल रही थी – darwindave

2

संभवतः किसी ने darwindaves जवाब उजागर कर सकते हैं:

माइक्रोसॉफ्ट.SqlServer.Types nuget पैकेज स्थापित करें। वैकल्पिक रूप से संदर्भ जोड़ें:

सी: \ प्रोग्राम फ़ाइलें (x86) \ Microsoft SQL Server \ 100 \ SDK \ Assemblies \ Microsoft.SqlServer.Types.dll और गुणों में स्थानीय प्रतिलिपि चिह्नित करना सुनिश्चित करें।

0

इसके अलावा जोड़ने के लिए

ग: \ Program Files (x86) \ Microsoft SQL सर्वर \ 100 \ एसडीके \ विधानसभाओं \ Microsoft.SqlServer.Types।dll

मैं भी एक बार जब हम उन यह एक आकर्षण की तरह काम किया जोड़ा

SqlServerSpatial110.dll

जोड़ने के लिए की जरूरत है!

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