2016-08-15 7 views
15

पर "बिल्ड असफल" मैं डेटाबेस से कक्षाएं उत्पन्न करने की कोशिश कर रहा हूं (EntityFramework का डेटाबेस पहला दृष्टिकोण)।डाटाबेस फर्स्ट स्काफोल्ड-डीबीकॉन्टेक्स्ट

सुविधा के लिए, मैं और अधिक या कम चलने इस ट्यूटोरियल के साथ: https://docs.efproject.net/en/latest/platforms/full-dotnet/existing-db.html

मैं एक बिंदु है जहां मैं दृश्य स्टूडियो पैकेज प्रबंधक कंसोल में कोड की इस पंक्ति के बराबर चला रहा हूँ पर हूँ:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -Verbose 

कोड की यह पंक्ति (-verbose मोड के साथ पर) त्रुटि पैदा कर रहा है:

Using startup project 'EFSandbox'. 
Using project 'EntityFrameworkCore' 
Build started... 
Build failed. 

मैं कोई दूसरे को देख विकल्प जो किसी भी सार्थक आउटपुट का उत्पादन करते हैं, और मुझे इस विशेष त्रुटि पर कोई दस्तावेज नहीं दिखाई देता है। यदि यह बिल्कुल मदद करता है, तो इस प्रोजेक्ट में वर्तमान में प्रोजेक्ट.जेसन फ़ाइल नहीं है। सब कुछ .csproj फ़ाइल में है, जिसे मैंने मैन्युअल रूप से संपादित नहीं किया है।

+2

के साथ एक नई फ़ाइल जोड़कर तय किया है जब आप पूरे समाधान को पुन: संकलित करते हैं तो क्या आपको कोई त्रुटि/चेतावनियां मिलती हैं? – Ignas

+0

@ इग्नास ने ऐसा किया, और हां, मुझे निर्भरता त्रुटियां मिलीं जो कि मैंने पुन: संकलित होने से पहले अस्तित्व में नहीं थी, और यह अस्तित्व में नहीं होना चाहिए था। इससे लड़ने की कोशिश करने के बजाय, मैंने समाधान को पुनर्निर्मित किया। हालांकि, मुझे अब एक नई समस्या है। मान लीजिए कि मुझे थोड़ा संपादन करने के विपरीत एक नया प्रश्न बनाना चाहिए (अगर यह समान है)। – LightToTheEnd

उत्तर

34

सबसे पहले यह सुनिश्चित करें कि आपके प्रोजेक्ट सामान्य रूप से मचान कमांड जारी करने से पहले बनाता है। मेरे साथ अक्सर क्या होता है, मैं कोड की एक पंक्ति लिखना शुरू कर दूंगा, महसूस करें कि एक नया डीबी कॉलम जोड़ा गया था और इसे मचान करने की कोशिश करने के लिए जाएं - फिर निर्माण (और मचान कमांड) विफल होने के कारण को समझने के लिए 20 मिनट लगें क्योंकि मेरे पास कोड की आधा लिखित रेखा है। उफ़।


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

पैकेज प्रबंधक कंसोल में Default project है और संभवतः आपकी फाइलें समाप्त हो गई हैं।

समाधान सरल है और आपको केवल -Project अपने विकल्पों में स्विच करने की आवश्यकता है।

यह पूर्ण आदेश मैं का उपयोग करें:

मचान-DbContext -Connection "सर्वर = (स्थानीय); डाटाबेस = DefenderRRCart; एकीकृत सुरक्षा = सच; Trusted_Connection = true" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir RRStoreContext.Models -context RRStoreContext -Project RR.DataAccess फोर्स

नोट: -Force फ़ाइलों के ऊपर लिख देगा लेकिन जो कि किसी भी अधिक मौजूद नहीं है को दूर नहीं। यदि आप अपने डीबी से टेबल हटाते हैं तो आपको पुरानी इकाई फाइलों को स्वयं हटा देना होगा (बस तिथि के अनुसार एक्सप्लोरर में सॉर्ट करें और पुराने को हटा दें)।

पूर्ण विकल्प: https://docs.efproject.net/en/latest/miscellaneous/cli/powershell.html#scaffold-dbcontext

+0

यह भी सुनिश्चित करता है कि Project.JSON फ़ाइलों में –

+0

में टिप्पणियां नहीं हैं और हां आप एक 'क्लास लाइब्रेरी' प्रोजेक्ट में मचान कर सकते हैं यदि आप एक अलग फ़ाइल में अपना डेटाकैस तर्क पसंद करते हैं, लेकिन प्राथमिक परियोजना को एस्पनेट कोर प्रोजेक्ट होना चाहिए –

+0

धन्यवाद! यह मेरे लिए काम किया। – Omicron

0

सोचें कि आपकी समस्या यह है कि ईएफसी उपकरण घोषित करने के लिए आपके पास प्रोजेक्ट.जेसन होना है। सही परियोजना प्रकार में पुनः लिखने का प्रयास करें और यह एक जेसन उत्पन्न कर सकता है।

0

मैं अभी भी इस समस्या को भी जब मैं यह सुनिश्चित किया अपने प्रोजेक्ट (जो था एफई कोर स्थापित) सही ढंग से बनाया गया है कि था। यह अभी भी "बिल्ड विफल" के साथ असफल रहा। संदेश, जो -Verbsose ध्वज का उपयोग करते समय दिखाई देता है।

  • एक थ्रो-दूर ASP.NET कोर वेब अनुप्रयोग समाधान
  • समाधान
  • को एफई कोर NuGet पैकेज जोड़ें एफई कोर जोड़े बनाएँ:

    मैं मेरे मामले में यह करने के लिए किया था Sql सर्वर प्रदाता NuGet पैकेज (क्योंकि मैं SqlServer उपयोग कर रहा हूँ)

  • NuGet करने के लिए अपने नए बनाए गए पैकेज पैकेज प्रबंधक कंसोल आदेश में
  • स्विच -Project बात करने के लिए एफई कोर उपकरण जोड़ें (और ईएफ कोर प्रावधान) परियोजना। आखिरी कदम सिर्फ अच्छे उपाय के लिए था, क्योंकि मेरे फेंकने वाले समाधान में केवल एक ही परियोजना थी।

ऐसा लगता है कि इस पूरी प्रक्रिया (है कि एक वर्ग पुस्तकालय नहीं है या सिर्फ एक नेट कोर परियोजना) एक ASP.NET कोर परियोजना समाधान में कहीं, शायद समाधान स्टार्टअप परियोजना के रूप में भी सेट की आवश्यकता है।

0

वीएस2017 पूर्वावलोकन 3 का उपयोग, .NET कोर 2 (पूर्वावलोकन) मेरे पास सभी प्रकार के मुद्दे थे, लेकिन आखिरकार मैंने ऊपर सुझाए गए दृष्टिकोण को लिया और एक नया समाधान बनाया।

  1. नया .NET कोर बनाया समाधान
  2. संपादित प्रोजेक्ट फाइल और 2.0 करने के लिए 1.0 बदल दिया है: <TargetFramework>netcoreapp2.0</TargetFramework>
  3. बंद/फिर से खोला समाधान

फिर, इकाई की रूपरेखा कहा:

  1. पैकेज मैनेजर कंसोल में:
    • स्थापित पैकेज Microsoft.EntityFrameworkCore.SqlServer -संस्करण 2.0.0-preview2 फाइनल
    • स्थापित पैकेज Microsoft.EntityFrameworkCore.Tools -संस्करण 2.0.0-preview2 फाइनल
    • स्थापित पैकेज Microsoft.EntityFrameworkCore। डिजाइन -संस्करण 2.0.0-preview2 फाइनल
  2. संपादित प्रोजेक्ट फ़ाइल, और कहा: <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.Dotnet" Version="2.0.0-preview2-final" />

फिर;

  1. मचान प्रोजेक्ट फ़ोल्डर
  2. दौड़ा में PowerShell आदेश शीघ्र और परिवर्तित निर्देशिका खोला गया: डॉटनैट एफई dbcontext पाड़ "सर्वर = डेस्कटॉप-MB70B7U; डाटाबेस = ForexForme; Trusted_Connection = सच" Microsoft.EntityFrameworkCore.SqlServer -o मॉडल
    • जहां आप अपनी कनेक्शन स्ट्रिंग डालते हैं!
    • मॉडल मेरी निर्देशिका जहां मैं अपने सभी वर्गों
1

डाल मेरे लिए के नाम मुद्दा यह है कि गया था मैं समाधान के अंदर एक नया खाली कंसोल प्रोजेक्ट में सेट अप करने के लिए, कोशिश कर रहा था जो कोई फाइल नहीं थी, इसलिए मचान ने स्टार्टअप प्रोजेक्ट के रूप में इस प्रोजेक्ट का उपयोग करने की कोशिश की और Main नहीं मिला। मैंने इसे एक खाली मुख्य

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